【问题标题】:Rails documentation on RequestForgeryProtection for API requests关于 API 请求的 RequestForgeryProtection 的 Rails 文档
【发布时间】:2017-05-29 02:33:25
【问题描述】:

我正在阅读关于protect_from_forgery http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html 的注释,这几行真的让我很困惑。

请务必记住,XML 或 JSON 请求也会受到影响,如果您正在构建 API,您应该更改 ApplicationController 中的伪造保护方法(默认情况下::exception):

class ApplicationController < ActionController::Base
  protect_from_forgery unless: -> { request.format.json? }
end

使用protect_from_forgery 方法开启CSRF 保护。默认情况下,protect_from_forgery 使用 :null_session 方法保护您的会话,该方法在请求期间提供一个空会话。

之前说异常是 protect_from_forgery unless: -&gt; { request.format.json? } 的默认值,但后来又说 null_session 是 protect_from_forgery 的默认值。

这是否意味着如果我们使用protect_from_forgery unless: -&gt; { request.format.json? },异常将成为默认值?如果我们使用protect_from_forgery,null_session 会成为默认值吗?

非常感谢任何帮助。

【问题讨论】:

    标签: ruby-on-rails json csrf csrf-protection


    【解决方案1】:

    文档是准确的,虽然有点混乱;每个语句都引用不同的“默认”行为。第一条语句的意思是,新 Rails 应用程序的默认设置是使用以下行生成您的 ApplicationController:

    protect_from_forgery :exception
    

    第二条语句的意思是,对于protect_from_forgery 方法,如果省略,参数的默认值为:null_session。因此,如果您要从 ApplicationController 中删除 :exception,也就是说,您只需:

    protect_from_forgery
    

    那么使用的行为将是:null_session 的行为(参见implementation 的证明)。

    所以第一条语句指的是新 Rails 应用程序的默认生成代码;第二个语句是指方法本身的默认值。不过很奇怪,它们是不同的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 2018-07-12
      • 2013-06-19
      • 2012-04-18
      • 1970-01-01
      相关资源
      最近更新 更多