在Rails中使用HTTP GET请求进行CSRF保护

时间:2012-02-25 18:45:17

标签: ruby-on-rails ruby-on-rails-3.1 csrf csrf-protection protect-from-forgery

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

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

1 个答案:

答案 0 :(得分:9)

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

假设攻击请求确实是cross originSame Origin Policy for DOM禁止通过DOM访问(例如,使用iframe进行嵌入时),Cross-Origin Resource Sharing (CORS)通过{调整跨域请求{3}}如下:

如果请求是XMLHttpRequest,i。即只有simple cross-origin requestsimple method,然后会发送该请求(这类似于基于HTML的CSRF)。但访问简单的跨源请求的响应取决于simple header fields

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

总而言之:除非您的服务器支持CORS并明确允许与任何其他来源共享(即Access-Control-Allow-Origin: *),否则CSRF响应(如果请求完全允许的话)将无法通过攻击网站。