保护ajax请求完整性的最佳方法

2023-11-22

我正在构建一个 Drupal 网站,其中包含大量用户特定信息,这些信息将使用 jQuery/ajax 发布。它本身的信息不是很敏感,重要的是验证表单数据没有被 Firebug 等工具篡改,并确保该信息确实是从指定用户请求的。换句话说,我试图找出在使用 ajax 发布时保护数据完整性和真实性的最佳方法。

理想情况下,我想使用一些众所周知的消息身份验证系统,例如 HMAC 算法。但由于这包含了对称密钥,我不知道如何在不暴露 javascript 文件中的秘密密钥的情况下加密 POST 数据(显然任何人都可以看到)。

如果我对它应该如何工作有错误的想法,请纠正我。

例如,我需要发送的信息

field1=x&field2=y&uid=10

...然后计算数据的哈希值以及密钥。是否可以在不暴露 javascript 代码中的哈希函数的情况下完成此操作?

CHECKSUM: hash(postdata, "secret_key")

...最后将校验和附加到原始后数据中。

field1=x&field2=y&uid=1&c=CHECKSUM

选择

我想到的另一种方法是使用登录用户的会话 ID。然而,这不会检查消息的完整性......

当使用 PHP 生成表单时,我可以使用以下命令生成隐藏输入

CHECKSUM: hash(session id for the current user, "secretkey")

然后我会使用ajax发布的是

field1=x&field2=y&uid=10&c=CHECKSUM

有了这个,验证适当的用户将是相当安全的(同样是伪代码)

ssid = SELECT ssid FROM sessions WHERE uid = $_POST[uid]
if(ssid && hash(ssid, "secretkey") == $_POST[c]) {
     //User OK
} else {
     //Invalid user
}

你无法做你想做的事。基本上,您正在尝试验证不受信任和不受控制的客户端上的一个组件(您的表单)是否未被同一客户端上的另一个组件篡改。您无法控制客户端。你可以想出各种各样的方法来制作它harder让某人在他们的客户端上执行此操作,但最终您必须向客户端公开您如何进行这些完整性检查。无论您在表单脚本中做什么,该客户端上的人员都可以阅读和理解(它必须在客户端上运行,因此与客户端交互的任何人都可以对您正在执行的任何操作进行逆向工程,以恢复所使用的技术和任何密钥) /etc,你必须启用你的方案)。

Web 应用程序安全的基本规则是您无法控制客户端上发生的事情,因此您不能信任这样的客户端验证/安全方案。

最终,这种计划提供的保护不太值得花费时间和投资来实施。一个有决心打破它的人一定能够打破它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保护ajax请求完整性的最佳方法 的相关文章