我构建了一个基于Rails 4的REST API。
为防止跨站点请求伪造攻击,我在执行POST,DELETE等请求所需的自定义HTTP标头内添加了一个CSRF令牌。
我知道Rails 4还提供了protect_from_forgery
方法,其中包含API的特殊选项:with: :null_session
。
所以我认为,鉴于它是最佳实践,这个新的Rails方法应该出现在我ApplicationController
的顶部。
但与此同时,我也想知道为什么要添加它...如果没有必要的话。因为正如我所说,我在自定义HTTP标头中需要一个CSRF令牌。
你能给我添加这个Rails功能的好处吗?非常感谢。
答案 0 :(得分:1)
protect_form_forgery
只是向控制器添加一个before操作,用于检查authenticity_token
是否有效。
:with
参数指定如果令牌无效,控制器的行为方式。
with: :exception
:在控制器中引发一个可以捕获的异常。with: :null_session
:重置会话本身。这意味着将删除完整的会话。换句话说,会话cookie将被重置。例如,会话中存储的user_id
将不再可用(puts session[:user_id] # => nil
)。因此,您始终必须提供令牌或任何其他身份验证,这对于API来说非常好。如果您不使用protect_from_forgery
,也可以删除session
。