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


Protecting values of an ajax form of inspect element, how to protect?

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

请查看此代码:

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

还有阿贾克斯:

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

如果 id 是 5 并且我编辑到 2,则 ajax 将得到 2

谁能帮我?

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

但是,作为额外的安全性。您可以添加第二个字段,其中包含隐藏字段的哈希值(当然是加盐的,否则毫无意义(。然后在服务器上检查该值是否仍然与哈希匹配(通过再次使用相同的盐值进行哈希处理(。

但你也不应该太相信这一点。

<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 和哈希值时,只需检查使用相同的盐值再次对 id 进行哈希处理是否会产生相同的哈希值。如果没有,则表示他更改了 ID。

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

盐必须是秘密的,并且在两个地方都是一样的。"盐"值是一段随机代码,它被添加到您想要哈希的值中,因此黑客很难尝试根据哈希值暴力破解您的原始值(但并非不可能(。

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