rails csrf令牌生存期

时间:2010-10-29 11:07:22

标签: ruby-on-rails security csrf

我使用Rails request_forgery_protection机制来保护我的POST操作免受CSRF攻击和验证码的影响,以保护GET操作。这样,如果有人在一个会话中进行两阶段攻击,使用当前令牌获取表单,然后使用该令牌发布伪造请求,他最终将面临验证码检查。

我坚持认为,因为Rails直到会话结束才重新生成CSRF令牌。这对我来说似乎不对,我认为在下一次行动之前应该更新令牌。我想知道我可能调整了一些错误的东西?还有另一种方法吗?

感谢。

2 个答案:

答案 0 :(得分:1)

我不确定这是不是一个好主意,但是您可以自己从应用程序控制器内部获取请求时自动删除令牌。

before_filter :reset_csrf


private
def reset_csrf
  session[:_csrf_token] = nil if request.get?
end

答案 1 :(得分:0)

如果没有为每个页面请求重新生成表单标记,则此保护很糟糕。我刚刚面对它(当测试Redmine,这是基于RoR的)并报告了这个问题,但没有重新测试它。

如果仍未重新生成,我建议您向RoR团队报告。