我使用jquery的$ .ajax()AP将数据发送到服务器进行验证。 (不是所有表格,而是那些需要更多服务器端验证的表格)
因此,我的服务器端脚本接收POSTED数据,并且它是验证魔术。 如果所有数据都经过验证,那么我只返回数字“1”,否则我返回零“0”
form.html
<form class="systemform" id="testform">
<input type="text" name="emailaddy" id="emailaddy" value="me@me.com" />
<input type="submit" name="button" id="272746866" value="Submit Form">
</form>
<script language="javascript" type="text/javascript">
$(document).ready(function(){
$("form.systemform").submit(function(){
var formid = $(this).attr("id");
var allFormValues = $(this).serialize();
$.ajax({ url:"validate.php",
data:allFormValues+"&formId="+formid,
success:function(response){
if(response == "0"){ alert("invalid data"); }
if(response == "1"){ alert("data validated"); }
}
});return false;
});
</script>
<?php
// validate.php
/* validate the serialized data here */
die("1"); // if everything checks out
?>
我非常有兴趣听到关于验证表单数据的方法的其他意见/策略。 好处是没有浏览器刷新 但现在我很好奇在验证后最好的表现。
目前,上面的代码并没有做太多。因此,在$ .ajax API的success
部分中,我有eval()方法等待从服务器端脚本获取方向。
success:function(response){
eval(response); return false;
}
通过传递js函数或命令,eval()为服务器提供了更大的灵活性。
2 die()例子:
<?php
//validation.php
die('alert("your email is incorrect");');
die('$("selector").html("fix this part");');
?>
我知道有人会想要谈论eval(),并且这是不安全的。我想听听。而且我想知道为什么。 (这对我们所有人都有好处)但请详细说明一些好的例子。
答案 0 :(得分:0)
eval
在任何时候都可能不安全,因为它可以执行任何JS并且可以轻松地对用户执行攻击。想象一下,黑客能够执行任何脚本,并可以向用户发送恶意URL或舔。如果他们使用特定的输入值,他们可以让你的服务器发出这个:
die('window.location.href = "http://evilsite.com"');
此外,您的客户端和服务器实现之间应该没有任何耦合。可能依赖于某些元素名称,但不依赖于代码。当您尝试集成PHP代码和JavaScript时,实际上会失去灵活性。如果eval
真的更灵活,那么可能表明您可能想重新考虑如何处理客户端的事情。
至于服务器端验证与客户端的比较,您总是需要单独进行。规避任何类型的客户端安全都是完全无足轻重的。获得它的唯一原因是为了方便用户(通过避免页面重新加载,突出显示受影响的字段等),但您需要进行服务器端验证以保护自己。
我可以看到使用ajax进行验证的唯一原因是,您需要检查数据库中的某些值(例如:查看是否已经使用了用户名)。我不会使用ajax来验证必填字段等内容。