CSRF令牌会话被重置

时间:2012-09-07 18:51:32

标签: ruby-on-rails-3.2 csrf authenticity-token

我正在使用Rails 3.2.3和active_record_store进行会话。

据我所知,rails中的CSRF令牌存储在会话中,除非调用reset_session或由于某种原因导致会话被破坏,否则不应重置。

但是在远程表单通过ajax加载的某些地方,它包含与该页面上META标记中指定的不同的真实性标记。因此,在提交该表单时导致无效的令牌错误和reset_session。

def form_authenticity_token
  session[:_csrf_token] ||= SecureRandom.base64(32)
end

我无法确定会话中有效的会话[:_ csrf_token]是否会被破坏并创建新令牌?

1 个答案:

答案 0 :(得分:2)

经过大量的狩猎,终于找到了这个问题。我直接在会话中存储模型对象,尽管使用了大小限制为65KB的活动记录会话存储,但会话在4kb之后被截断,这导致CRSF令牌被擦除并生成新的令牌。是啊!失误......永远不要在会话中存储模型对象,除非你有充分的理由不这样做。无论如何仍然试图弄清楚为什么即使在有一个活跃的记录会话存储后我也无法在会话中存储更大的对象。