在有或没有 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
。
我基于 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
。