为什么rails不验证对CSRF的XHR请求?

时间:2014-10-03 13:32:35

标签: ruby-on-rails ajax csrf

在: http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html

确定跨站点请求伪造验证。以下功能:

  def non_xhr_javascript_response?
    content_type =~ %r(\Atext/javascript) && !request.xhr?
  end

结束意味着即使令牌无效,也没有为CSRF验证XHR请求?

这是为什么? XHR请求是否意味着CRSF不需要使用Auth Token进行验证?

1 个答案:

答案 0 :(得分:1)

这是不正确的。 Rails检查所有非get / head帖子的CSRF令牌,无论它们是否为ajax。

此外,由于rails 4.1 Rails还使用javascript格式检查非xhr GET请求的csrf令牌。这是为了防止在通过JSON-P请求在跨域请求中访问时泄露信息。对于xhr,浏览器已经强制执行跨域限制。这是您使用的方法:查看请求是否需要额外检查。

如果你回到足够远的时间,rails确实用来免除来自CSRF检查的ajax请求,因为上述浏览器施加了限制。但是Rails只知道请求是ajax请求,因为存在X-Requested-With标头,并且发现这可能是伪造的,所以这是removed