【问题标题】:PHP: CSRF prevention, checking for remote addessPHP:CSRF预防,检查远程地址
【发布时间】:2013-01-07 17:30:05
【问题描述】:

我正在编写一个用于 CSRF 预防的 PHP 类。

该类可以生成 CSRF 令牌,然后检查它们,但我还要验证 - 作为额外 - 如果请求来自同一浏览器 ($_SERVER['HTTP_USER_AGENT']) 和同一 IP ($_SERVER['REMOTE_ADDR'])。 我知道有些用户可能有动态 IP 地址,而这些地址是可以改变的。 所以我的问题是:用户的 IP 地址有可能在 2 个请求之间更改吗? 我还应该检查$_SERVER['REMOTE_ADDR'] 还是只检查用户代理?

【问题讨论】:

    标签: php csrf


    【解决方案1】:

    所以我的问题是:用户的 IP 地址可能会更改 在 2 个请求之间?

    是的

    我应该也检查 $_SERVER['REMOTE_ADDR'] 还是只检查用户 代理?

    没有必要——你只是在为自己做更多的工作。查看OWASP guide on CSRF 了解更多信息。您可以看到 the best ways to prevent CSRF attacks here. 注意 - OWASP 确实建议仅在您不使用 CSRF 令牌时查看 CSRF 的标头

    【讨论】:

    • 谢谢。为有用的链接 +1。
    【解决方案2】:

    IP 地址对于反 CSRF 来说是不可靠的,因为它可能会频繁更改,这将使您的 Web 应用程序对这些用户无法使用。 AOL 是一个众所周知的 ISP 示例,它可以在请求之间切换 IP。

    用户代理又不是很可靠。这也可以更改,因为它通常包含软件版本详细信息,有时还包含已安装软件或插件的名称。还要考虑到用户代理与会话 ID cookie 发送到同一位置(在 HTTP 请求中),因此如果攻击者能够获取会话 ID,那么他们很可能已经拥有或可以获得关联的用户代理.

    最好的形式是 CSRF 保护是在执行操作时生成要检查的令牌。理想情况下,令牌应该在整个会话期间发生变化,而不是保持静态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 2020-07-27
      • 2017-12-07
      • 2012-08-03
      • 1970-01-01
      • 2016-02-29
      相关资源
      最近更新 更多