【问题标题】:CSRF Token - two requests = fail?CSRF 令牌 - 两个请求 = 失败?
【发布时间】:2012-02-09 05:24:12
【问题描述】:

我最近一直在为我的网站编写一个 csrf 保护库。

如果不是在 $_SESSION 中生成,我会为每个请求生成一个随机令牌。

一切运行良好,经过测试并且很好 - 但是,想想这种情况:

在我的网站上:

  1. 用户访问我的网站 (example.com) 并登录。
  2. 现在他打开了另一个恶意网站。

现在有恶意网站(在 javascript 中):

  1. 首先运行 http://example.com .. 并使用 javascript(正则表达式或其他)以表单形式在 html 中获取 csrf TOKEN - 说它的“randomToken”。
  2. 使用 javascript - 现在获取 http://example.com/my-profile/?deletemyaccount=1&token=randomToken

这显然也可以通过 post 完成,而不仅仅是 get。

我曾想过检查 HTTP_REFERER ,但这并不可靠。

关于如何防止这种情况的任何想法?这真的可能吗?在我看来,这种攻击使用 jQuery 应该很容易。

【问题讨论】:

  • 非常有可能使用 AJAX。引用者也无济于事,因为任何和所有标头都可能在 AJAX 请求中被操纵。我认为你在这方面不走运。尝试改用 CAPTCHA。

标签: php csrf protection


【解决方案1】:

其他站点应该无法通过 javascript 获取您站点的内容,浏览器明确禁止这样做。查看Same Origin Policy

【讨论】:

  • 谢谢你!采纳答案!所以唯一的方法是通过对我自己的来源进行 XSS 攻击。这实际上解释了很多。
猜你喜欢
  • 2017-08-12
  • 2020-12-02
  • 2017-06-23
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
相关资源
最近更新 更多