1

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

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

4

2 回答 2

2

所以我的问题是:用户的 IP 地址有可能在 2 个请求之间发生变化吗?

是的

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

没有必要——你只是在为自己做更多的工作。查看CSRF 上的 OWASP 指南以获取更多信息。您可以在此处查看防止 CSRF 攻击的最佳方法。注意 - OWASP 建议仅在您不使用 CSRF 令牌时查看 CSRF 的标头。

于 2013-01-07T09:30:05.633 回答
1

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

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

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

于 2013-01-07T09:29:19.763 回答