我正在编写一个用于CSRF预防的PHP类。
该类可以生成CSRF令牌,然后检查它们,但我还要验证 - 如果请求来自同一浏览器($_SERVER['HTTP_USER_AGENT']
)和相同的IP({{1 }})。
我知道有些用户可能拥有动态IP地址,这些地址可能会发生变化。
所以我的问题是:用户的IP地址可能会在2个请求之间发生变化吗?
我还应该检查$_SERVER['REMOTE_ADDR']
还是只检查用户代理?
答案 0 :(得分:2)
所以我的问题是:用户的IP地址可能会发生变化 2个请求之间?
是
我是否还要检查$ _SERVER ['REMOTE_ADDR']或仅检查用户 剂?
没有必要 - 你只是为自己做更多的工作。查看OWASP guide on CSRF了解详情。您可以看到the best ways to prevent CSRF attacks here.注意 - 仅当您没有使用CSRF令牌时,OWASP才建议查看CSRF 的标头。
答案 1 :(得分:1)
反CSRF的IP地址不可靠,因为它可能经常更改,这将使您的Web应用程序无法用于这些用户。 AOL是已知在请求之间切换IP的ISP的示例。
用户代理再次不太可靠。这也可以更改,因为它通常包含软件版本详细信息,有时还包含已安装软件或插件的名称。还要考虑用户代理与会话ID cookie(在HTTP请求中)发送在同一位置,因此如果攻击者能够获取会话ID,那么他们可能已经拥有或可以获得相关的用户代理
最佳形式是CSRF保护是在执行操作时生成要检查的令牌。理想情况下,令牌应该在整个会话期间发生变化,而不是保持静态。