10

我知道 Rails 默认情况下对请求没有CSRF保护HTTP GET,因为它声称它们是幂等的。但是,这些 GET 请求会返回给用户的敏感信息,我不希望恶意站点检索此信息。

在 Rails中保护HTTP GET请求的最佳方法是什么?CSRF

4

1 回答 1

10

为了能够读取对 CSRF 攻击请求的响应,攻击者需要让受害者执行他的 JavaScript 代码。在这种情况下,访问将受到一些Same Origin Policy的限制。

假设攻击请求确实是跨域的,DOM 的同源策略禁止通过 DOM 访问(例如,当使用 嵌入时iframe),跨域资源共享 (CORS)通过XMLHttpRequest管理跨域请求,如下所示:

如果请求是一个简单的跨域请求,i。e. 简单的方法,只有简单的标头字段,然后该请求将被发送(这类似于基于 HTML 的 CSRF)。但是访问一个简单的跨域请求的响应取决于响应是否允许资源共享

其他跨域请求在发送实际请求之前需要所谓的预检。发送该请求以检查服务器是否允许来自发送预检的源的请求。并且只有在预检成功并且对实际请求的响应允许资源共享时,才能访问响应。

因此得出结论:除非您的服务器支持 CORS 并明确允许与任何其他来源(即Access-Control-Allow-Origin: *)共享,否则攻击站点将无法读取 CSRF 响应(如果请求完全允许)。

于 2012-03-06T21:07:02.820 回答