在有或没有 Rails 的 protect_from_forgery 的情况下开启请求伪造保护?

Turn on request forgery protection with or witout Rails's protect_from_forgery?

我基于 Rails 4.

构建了一个 REST API

为了防止 cross-site 请求伪造攻击,我在自定义 HTTP header 中添加了一个 CSRF 令牌,它需要执行 POST、DELETE 等请求

我知道 Rails 4 还提供了一个 protect_from_forgery 方法,其中有一个针对 API 的特殊选项:with: :null_session.

所以我认为,鉴于它是 最佳实践,这个新的 Rails 方法应该出现在我的 ApplicationController 的顶部。

但同时,我也想知道为什么我要添加它...如果没有必要。因为正如我所说,我需要在自定义 HTTP header.

中使用 CSRF 令牌

您能告诉我添加此 Rails 功能的好处吗?非常感谢。

protect_form_forgery 只是向控制器添加一个前操作,检查 authenticity_token 是否有效。

:with 参数指定控制器在令牌无效时的行为方式。

  • with: :exception: 在控制器中引发一个可以被捕获的异常。
  • with: :null_session:重置会话本身。这意味着整个会话将被删除。换句话说,会话 cookie 将被重置。例如,存储在会话中的 user_id 将不再可用 (puts session[:user_id] # => nil)。因此,您始终必须提供令牌或任何其他身份验证,这对于 API.
  • 来说完全没问题

如果您不使用 session,您也可以删除 protect_from_forgery