我们是否应该检查 CSRF 令牌的只读操作

Should we check CSRF token for read only actions

我听说很多人建议 CSRF 处理对于执行写操作的操作是强制性的,但对于执行只读操作的操作是可选的?

如果是,请分享一个示例,说明如何使用 CSRF 来利用仅执行只读操作的操作。

通常在浏览器中safe methods do not have to be protected against CSRF because they do not make changes to the application (i.e they are "read only" as you state in your question), and even if they're returning sensitive information this will be protected by the Same Origin Policy

如果您的网站是按照标准实施的,您的 GET 请求应该是安全的,因此不需要保护。

但是,在特定情况下可能会执行“跨站点 DoS”* 攻击。假设您的报告页面执行需要 10 秒,数据库服务器上的使用率为 100% CPU,网络服务器上的使用率为 80% CPU。

您网站的用户知道永远不要在办公时间访问 https://yoursite.example.org/Analysis/GetReport,因为它会杀死服务器并给其他用户带来糟糕的用户体验。

但是,Chuck 想要关闭您的 yoursite.example.org 网站,因为他不喜欢您或您的公司。

在贵公司员工经常光顾的繁忙论坛上,http://forum.walkertexasranger.example.com,他将签名设置为:

<img src="https://yoursite.example.org/Analysis/GetReport" width=0 height=0 />

每次您的员工阅读 Chuck 的一篇帖子时,身份验证 cookie 都会发送到 https://yoursite.example.org/Analysis/GetReport,因此您的站点会处理请求并生成报告,而您的系统会因为 CPU 而离线被这些不断的请求吃掉了。

因此,即使该请求是 GET 请求并且不会对您的系统进行任何永久更改(也称为“安全”/“只读”),但实际上每次它 运行。因此,最好使用 CSRF 预防方法来保护它,并可能实现为 POST.

*XSDoS,或跨站点拒绝服务,是我创造的一个短语,所以不要去谷歌搜索。