代码之家  ›  专栏  ›  技术社区  ›  David Christiansen

验证表单发布的来源以确保它来自同一服务器/应用程序

  •  6
  • David Christiansen  · 技术社区  · 16 年前

    我希望找到一个平台/语言不可知的解决方案,以确保表单发布的来源来自预期的来源。也就是说,page1.aspx在同一个网站中发布到page2.php。

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

    3 回复  |  直到 15 年前
        1
  •  8
  •   FWH    16 年前

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

    如果它是相同的,那么您就知道提交的表单来自预期的位置。

        2
  •  1
  •   Joe    15 年前

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

    如果您没有会话信息集(最佳选项),那么您可以包括一个带有加密时间戳的隐藏字段,然后将它(在解密之后)与进程结束时的当前时间进行比较,以确保它相对较近,从而在您认为必要时保持最新。

        3
  •  0
  •   Andrew Y    16 年前

    您可以在表单中包含一个隐藏字段,即sha1hash(“某些秘密”+远程IP+个人会话秘密)。

    PersessionSecret是您在会话开始时自动生成的内容。”“某些秘密”是一个全局秘密值,如果随机生成的PersessionSecret不够随机,这将有一点帮助。

    然后在提交表单时进行相同的计算,您知道它很可能是从发送到的同一个客户机提交的。(当然,如果在同一个地址后面有多个客户机,比如代理或NAT,那么就不能可靠地区分它们)。

    推荐文章