使用Rails的protect_from_forgery启用请求伪造保护?

时间:2015-11-26 17:17:47

标签: ruby-on-rails ruby rest csrf

我构建了一个基于Rails 4的REST API。

为防止跨站点请求伪造攻击,我在执行POST,DELETE等请求所需的自定义HTTP标头内添加了一个CSRF令牌。

我知道Rails 4还提供了protect_from_forgery方法,其中包含API的特殊选项:with: :null_session

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

但与此同时,我也想知道为什么要添加它...如果没有必要的话。因为正如我所说,我在自定义HTTP标头中需要一个CSRF令牌。

你能给我添加这个Rails功能的好处吗?非常感谢。

1 个答案:

答案 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