jQuery - 表单提交与Eval()的一般问卷

时间:2013-01-21 03:13:20

标签: php jquery eval form-submit

我使用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(),并且这是不安全的。我想听听。而且我想知道为什么。 (这对我们所有人都有好处)但请详细说明一些好的例子。

1 个答案:

答案 0 :(得分:0)

eval在任何时候都可能不安全,因为它可以执行任何JS并且可以轻松地对用户执行攻击。想象一下,黑客能够执行任何脚本,并可以向用户发送恶意URL或舔。如果他们使用特定的输入值,他们可以让你的服务器发出这个:

die('window.location.href = "http://evilsite.com"');

此外,您的客户端和服务器实现之间应该没有任何耦合。可能依赖于某些元素名称,但不依赖于代码。当您尝试集成PHP代码和JavaScript时,实际上会失去灵活性。如果eval真的更灵活,那么可能表明您可能想重新考虑如何处理客户端的事情。

至于服务器端验证与客户端的比较,您总是需要单独进行。规避任何类型的客户端安全都是完全无足轻重的。获得它的唯一原因是为了方便用户(通过避免页面重新加载,突出显示受影响的字段等),但您需要进行服务器端验证以保护自己。

我可以看到使用ajax进行验证的唯一原因是,您需要检查数据库中的某些值(例如:查看是否已经使用了用户名)。我不会使用ajax来验证必填字段等内容。