我正在构建一个 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
}