【问题标题】:Validate Origin of FORM POST to ensure it came from same server/app验证 FORM POST 的来源以确保它来自同一服务器/应用程序
【发布时间】:2010-11-13 10:49:37
【问题描述】:

我想找到一个与平台/语言无关的解决方案,以确保 FORM POST 的来源来自预期的来源。 IE。 Page1.aspx 发布到同一网站内的 Page2.php。

具体来说,我在这里尝试做的是防止请求伪造。

【问题讨论】:

标签: http csrf


【解决方案1】:

旧线程,但可能仍然有用。

如果您没有设置会话信息(最佳选项),那么您可以包含一个带有加密时间戳的隐藏字段,然后将其(解密后)与进程结束时的当前时间进行比较,以确保它相对接近因此,在您认为必要的情况下最近。

【讨论】:

  • 这不一定能防止 CSRF(跨站请求伪造),而是防止重放攻击,这是另一回事。
【解决方案2】:

您可以在表单中包含一个隐藏字段,即 SHA1Hash("some-secret" + Remote_IP + PerSessionSecret)。

PerSessionSecret 是您在会话开始时自动生成的。 "some-secret" 是一个全局秘密值 - 如果随机生成的 PerSessionSecret 不够随机,这将有所帮助。

然后在表单提交时进行相同的计算,您知道它很可能是从发送它的同一个客户端提交的。 (当然,如果您在单个地址后面有多个客户端,例如代理或 NAT,则无法可靠地区分它们。

【讨论】:

    【解决方案3】:

    在表单中使用隐藏字段,其中包含您的应用生成的令牌。将令牌存储在用户会话中。提交表单时,您的应用会检查隐藏字段的值是否与用户会话中存储的值相同。

    如果相同,则您知道提交的表单来自预期的位置。

    【讨论】:

    • 但是对该令牌的有效期设置一个时间限制,以防止它被无限期地复制和重复使用。
    猜你喜欢
    • 2018-02-15
    • 1970-01-01
    • 2013-08-19
    • 2014-03-09
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    相关资源
    最近更新 更多