Rails CSRF令牌 - 它们会过期吗?

AnA*_*ice 24 ruby-on-rails ruby-on-rails-3

我注意到如果你使用无效的CSRF令牌发帖,rails/devise会自动注销你.

我有一个不刷新页面的应用程序,用户长时间坐在实时页面上.每隔一段时间,用户就会被踢出局.我想知道CSRF令牌是否到期,使其无效.

这就是为什么我要学习,Rails CSRF令牌到期了吗?某个地方有时间吗?

谢谢

mad*_*lep 26

Rails中的CSRF保护通过将随机值存储为正在提交的表单中的字段以及在用户会话中来工作.如果在提交表单时值不匹配,Rails会拒绝表单提交请求.

如果您在Rails中使用默认的cookie会话存储,那么会话将不会过期(直到cookie完成).如果您正在使用其他内容(文件或数据库支持的会话),那么是,如果这些会话到期,表单提交将失败并出现CSRF错误.

因此,如果您使用基于cookie的会话(默认),请检查cookie到期日期.如果看起来不错,那可能是其他一些问题.

  • @Ryan-NealMes 如果没有会话 cookie,会话就无法存在,因此您需要将表单中的真实性令牌与会话中存储的令牌进行验证。 (2认同)
  • 关于会话,这是正确的。存储在会话中的值在会话消失之前不会消失。它没有具体回答 Rails 是否会无限期地继续接受给定的 csrf 令牌。答案也是肯定的,至少在 Rails 4 中是这样。会话中存储的内容或表单中呈现的屏蔽令牌中都没有时间组件。您可能也想添加它。 (2认同)