【问题标题】:understanding of CSRF token对 CSRF 代币的理解
【发布时间】:2012-07-02 12:03:42
【问题描述】:

我读了这篇文章Understanding CSRF - Simple Question 但我仍然不明白 CSRF 令牌如何阻止 CSRF 令牌。

让我困惑的主要问题是,为什么攻击者可以向我的站点发出任何 http 请求,但他无法读回响应?

1、如果我在每个post请求之前都发布一个http请求来获取token,攻击者也可以发出“get token”请求来获取token。

2、如果我在.html页面加载时将token设置为隐藏输入,攻击者也可以发出“get html”请求来获取这个.html页面并读取隐藏页面的值。

我只是不明白为什么攻击者可以发出请求但无法读取响应?

【问题讨论】:

  • 攻击者不能发出“get html”请求,因为两个页面不共享同一个域名,浏览器会拒绝请求并失败并报错。试试看。

标签: http csrf


【解决方案1】:

攻击者根本无法自己发出请求。他能做的就是欺骗他的受害者(或受害者的浏览器)提出这个请求。因此,任何响应都会返回到受害者的浏览器。

这里的问题是攻击者可以选择 URL,即使没有看到任何响应,访问该 URL 也可能对受害者造成有害后果。

攻击者需要欺骗受害者发出请求(而不是仅仅访问自己的 URL)的原因是,如果受害者这样做,受害者的会话 cookie 也会被发送,所以它看起来像一个服务器的经过身份验证的操作。

如果我在加载.html页面时将token设置为隐藏输入,攻击者也可以发出“get html”请求来获取这个.html页面并读取隐藏页面的值。

攻击者只能为自己的会话获取隐藏输入,而不能为受害者的会话获取。这个隐藏的输入会因会话而异(否则没有意义)。

CSRF 令牌确保每个(关键)请求都包含必须与用户会话匹配的随机数据。这样一来,攻击者就不能仅仅猜测完整的 URL 是什么,然后诱使某人点击它。

【讨论】:

  • 你说隐藏输入会因会话而异,但如果我登录qqx.com(for示例),那么我在一个属于qqx.com的新IE标签中打开qqx.com/XXX.html ,显示我登录了,是不是说qqx.com的session和qqx.com/XXX.html的session是一样的?
  • 打开了一个新标签。现在在您朋友的计算机上尝试使用您朋友的用户 ID。他将看到不同的令牌值(我希望......) CSRF 攻击者将无法来到您的家并打开您计算机上的选项卡。如果他能做到这一点,他可以使用各种更危险的攻击。
  • 我的网站只允许一个用户同时登录..我的测试步骤是: 1.制作一个包含javascript的html页面,一旦用户访问该页面,它就可以发布请求,只需调用它“坏网站”,2.登录我的网站,现在会话和cookie已创建,3.现在访问“坏网站”,脚本正在执行,可以成功发布请求。
  • CSRF 令牌从哪里来? “不良网站”如何发布包含 CSRF 令牌的请求?
  • 我创建了一个API“getCSRFToken.php”,当用户执行“post getCSRFToken.php”时,它可以返回token值。也许我不应该提供这个API,因为每个人都可以执行这个API来获取token,我应该在隐藏输入的html加载和存储时生成token。
猜你喜欢
  • 2018-05-02
  • 1970-01-01
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 2015-09-21
  • 2014-05-29
  • 2016-07-05
  • 1970-01-01
相关资源
最近更新 更多