PHP:CSRF预防,检查远程地址

时间:2013-01-07 09:13:28

标签: php csrf

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

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

2 个答案:

答案 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保护是在执行操作时生成要检查的令牌。理想情况下,令牌应该在整个会话期间发生变化,而不是保持静态。