4

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

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

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

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

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

4

1 回答 1

2

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

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

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

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

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

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

于 2012-07-02T03:36:33.290 回答