保护ajax形式的检查元素的价值,如何保护?

时间:2016-02-15 21:31:59

标签: javascript php jquery ajax

如何保护我的ajax形式的检查元素? 我正在创建一个系统而忘记了用户可以使用inspect元素编辑隐藏输入的值。

请查看此代码:

<input type="hidden" class="id" value="<?=$array["id"]?>" />

和ajax:

 var id = $(this).parent().find('.id').val();

如果ID为 5 且我编辑为 2 ,则ajax将获得 2

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:4)

你根本做不到。您永远不能假设从客户端发送的数据是值得信赖的。这就是为什么你应该始终检查服务器上的输入。在客户端进行检查只是提高效率的一项额外措施。它永远不是替代品,永远不应该是唯一的安全措施。

但是,作为额外的安全措施。你可以添加第二个字段,其中包含隐藏字段的散列值(当然是盐渍的,否则它是没有意义的)。然后检查服务器上的值是否仍然与散列匹配(通过再次使用相同的salt值进行散列)。

但你也不应该相信太多。

<input type="hidden" name="id" class="id" value="<?=$array["id"];?>" />
<input type="hidden" name="hash" class="id" value="<?=md5($array["id"] . "somerandomstring");?>" />

然后在服务器上检查它是否仍然匹配并且没有被篡改。

$id = $_GET["id"];
$hash = $_GET["hash"]
if(md5($id . "somerandomstring") == $hash) {
    // it's okay
} else { 
    // he changed it 
}

当您通过AJAX从客户端收到id和哈希值时,只需检查是否使用相同的salt值再次对id进行哈希处理会给出相同的哈希值。如果没有,这意味着他改变了身份。

但您仍应检查是否允许用户处理具有此ID的项目。也许你应该使用sha而不是md5,因为md5非常不安全。

盐必须是秘密的,两个地方都是一样的。 “salt”值是一段随机代码,它被添加到您想要哈希的值中,因此黑客更难以根据哈希值来强制执行原始值(但并非不可能)。

添加几分钟的超时时间,这可能足够安全。