Php jQuery-表单提交一般问卷和Eval()

Php jQuery-表单提交一般问卷和Eval(),php,jquery,eval,form-submit,Php,Jquery,Eval,Form Submit,我使用jquery的$.ajax()AP将数据发送到服务器进行验证。 (不是在所有表单上,而是在需要更多服务器端验证的表单上) 因此,我的服务器端脚本接收发布的数据,并执行验证魔术。 如果所有数据都经过验证,那么我只返回数字“1”,否则返回零“0” form.html <form class="systemform" id="testform"> <input type="text" name="emailaddy" id="emailaddy" value="me@me

我使用jquery的$.ajax()AP将数据发送到服务器进行验证。 (不是在所有表单上,而是在需要更多服务器端验证的表单上)

因此,我的服务器端脚本接收发布的数据,并执行验证魔术。 如果所有数据都经过验证,那么我只返回数字“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>
eval()通过将js函数或命令传回服务器,提供了更大的灵活性

2个示例:

<?php
//validation.php

die('alert("your email is incorrect");');  
die('$("selector").html("fix this part");');
?>


我知道有人会想说一些关于eval()的事情,这是不安全的。我想听一听。我想知道为什么。(这对我们所有人都有好处)但请用一些好的例子来详细说明。

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

die('window.location.href = "http://evilsite.com"');
此外,客户机和服务器实现之间根本不应该存在耦合。可能依赖于某些元素名称,但不依赖于代码。当您尝试集成php代码和JavaScript时,实际上会失去灵活性。如果
eval
确实更灵活,这可能表明您可能需要重新思考如何在客户端处理事情

至于服务器端验证和客户端验证,您始终需要分别进行。规避您可能拥有的任何类型的客户端安全性都是微不足道的。使用它的唯一原因是为了方便用户(通过避免页面重新加载、突出显示受影响的字段等),但您还需要进行服务器端验证以保护自己


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

我可以看到die()包含恶意url,但黑客不需要访问php服务器脚本才能传递这样的内容吗?@coffeemonitor不一定;他们可以将一些值发布到您的脚本中,从而使其返回该值。这会有点奇怪/极端,但为什么要冒不必要的风险呢?
<?php
//validation.php

die('alert("your email is incorrect");');  
die('$("selector").html("fix this part");');
?>
die('window.location.href = "http://evilsite.com"');