当前位置: 首页 > 面试题库 >

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

姜宏盛
2023-03-14
问题内容

我正在建立一个Drupal网站,其中包含许多将使用jQuery /
ajax发布的用户特定信息。它自身的信息不是很敏感,仅重要的是验证表单数据是否已被诸如Firebug之类的工具篡改,并确保确实已从指定用户请求该信息。换句话说,我正在尝试找出用ajax发布时保护数据完整性和真实性的最佳方法。

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

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

例如,我需要发送的信息

field1=x&field2=y&uid=10

…然后计算数据的哈希值和密钥。是否可以在不暴露我的JavaScript代码中的哈希函数的情况下做?

CHECKSUM: hash(postdata, "secret_key")

…最后将校验和附加到原始postdata。

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
}

问题答案:

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

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

最后,这种方案提供的保护不太值得花费时间和金钱来实施。坚决打破它的人将能够做到。



 类似资料:
  • 问题内容: 想象一下下一个场景:用户想要注册到网页并填写表格。当他填写表格时,jQuery会通过正则表达式检查字段是否有效等。 将电子邮件作为用户注册后将使用的主键,需要使用Ajax来检查电子邮件字段,以使用户知道该电子邮件是否已注册。我想使用Ajax进行检查,以避免发送完整的表单并清空它,刷新页面等。 因此,当用户结束填写电子邮件字段时,Ajax请求将发送到服务器,类似于下一个链接: 当chec

  • 问题内容: 我一直在通过执行以下操作来确保我的AJAX请求成功: 检查状态变量是执行此操作的最佳方法,还是有一种更好的方法来确保请求实际通过?我正在考虑“成功”请求是一个成功命中我要发布到的页面的请求,而不会超时(例如,服务器已关闭,并且在出现故障之前立即进行了AJAX请求)或返回任何404或500错误。 问题答案: 通过这样调用,您将仅自动传递一个函数。 如果请求中出现问题,则甚至不会执行此方法

  • 这是一个有点宽泛的问题。我正在构建一个带有node和express的stripe服务器,并使用react前端对其进行攻击。我已经把基本的api,在那里我可以创建客户,保存支付方法和访问帐户编辑,更新等。 通过Stripe自己推荐的包收集支付方式的详细信息,该包保护PPI以使其符合政府关于隐私的规定。 现在我正在尝试保护rest api,以便只有经过验证的个人才能访问apiendpoint。例如,我

  • 问题内容: 我已经决定,在某些类中,我想拥有受保护的方法,但要对其进行测试。这些方法中的一些是静态的且简短的。因为大多数公共方法都使用了它们,所以以后我可能可以安全地删除测试。但是,为了从TDD方法入手并避免调试,我真的想对其进行测试。 我想到了以下几点: *建议的“ 方法对象”似乎对此过于矫kill过正。 * 从公共方法开始,当更高级别的测试提供了代码覆盖范围时,请将其置于保护状态并删除测试。

  • 后端使用Spring Data+Spring MVC。 谢谢你。

  • 问题内容: 伪代码: 更好的是某种指数补偿 问题答案: 像这样: