2

我使用 jquery 的 $.ajax() AP 将数据发送到服务器进行验证。(并非所有形式,但那些确实需要更多服务器端验证的形式)

因此,我的服务器端脚本接收 POSTED 数据,并且它是验证魔法。如果所有数据都经过验证,那么我只返回数字“1”,否则我返回零“0”

表单.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
    ?>

我很想听听有关这种验证表单数据的方法的其他意见/策略。好处是没有浏览器刷新。
但是现在我很好奇验证后最好执行什么。

目前,上面的代码并没有做太多。因此,success在 $.ajax API 的部分中,我有 eval() 方法等待从服务器端脚本获取指示。

success:function(response){
    eval(response); return false;
}

eval() 通过传回 js 函数或命令,为服务器提供了更大的灵活性。

2 die() 例子:

<?php
//validation.php

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

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

4

1 回答 1

0

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

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

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

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

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

于 2013-01-21T03:21:53.923 回答