如何保护我的ajax形式的检查元素? 我正在创建一个系统而忘记了用户可以使用inspect元素编辑隐藏输入的值。
请查看此代码:
<input type="hidden" class="id" value="<?=$array["id"]?>" />
和ajax:
var id = $(this).parent().find('.id').val();
如果ID为 5 且我编辑为 2 ,则ajax将获得 2
任何人都可以帮助我吗?
答案 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”值是一段随机代码,它被添加到您想要哈希的值中,因此黑客更难以根据哈希值来强制执行原始值(但并非不可能)。
添加几分钟的超时时间,这可能足够安全。