我理解Rails默认情况下对CSRF
请求没有HTTP GET
保护,因为它声称它们是幂等的。但是,从这些GET请求返回给用户的敏感信息,我不希望恶意站点检索此信息。
在Rails中保护HTTP GET
CSRF
请求的最佳方法是什么?
答案 0 :(得分:9)
为了能够读取对CSRF攻击请求的响应,攻击者需要让受害者执行他的JavaScript代码。在这种情况下,访问将受到一些Same Origin Policy的限制。
假设攻击请求确实是cross origin,Same Origin Policy for DOM禁止通过DOM访问(例如,使用iframe
进行嵌入时),Cross-Origin Resource Sharing (CORS)通过{调整跨域请求{3}}如下:
如果请求是XMLHttpRequest,i。即只有simple cross-origin request的simple method,然后会发送该请求(这类似于基于HTML的CSRF)。但访问简单的跨源请求的响应取决于simple header fields。
在发送实际请求之前,其他跨源请求需要所谓的response allows resource sharing。发送该请求以检查服务器是否允许来自发送预检的来源的请求。只有当预检成功并且对实际请求的响应允许资源共享时,才能访问响应。
总而言之:除非您的服务器支持CORS并明确允许与任何其他来源共享(即Access-Control-Allow-Origin: *
),否则CSRF响应(如果请求完全允许的话)将无法通过攻击网站。