【问题标题】:Why does rails not verify XHR requests for CSRF?为什么 Rails 不验证 CSRF 的 XHR 请求?
【发布时间】:2014-11-28 13:41:21
【问题描述】:

在: 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 进行验证?

【问题讨论】:

    标签: ruby-on-rails ajax csrf


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2015-07-21
      • 2012-07-17
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 2012-05-10
      相关资源
      最近更新 更多