使用ActionController::InvalidAuthenticityToken
的应用程序上存在随机CSRF错误。例如,每100个请求中有1个或更多。为什么这些错误会像这样随机出现?
我在常规的<%= form_with %>
标签上放置了它们,在javascript帖子上放置了它们(但这在大多数情况下都有效,因为我每次都将meta[name='csrf-token']
添加为X-CSRF-TOKEN
),有些则放在{ {1}}等...
为什么有时而不是每次都会发生?
致谢
答案 0 :(得分:2)
Rails会话到期时,CSRF令牌将到期(某些配置除外)。
如果用户在页面上显示了表单,请离开几十分钟(取决于会话持续时间),然后重新填写表单,则会话(和令牌)可能已过期。然后,在提交时,Rails将引发InvalidAuthenticityToken
错误。
有关此内容的更多信息,Rails CSRF Tokens - Do they expire?
另一种情况涉及(坏)机器人:机器人可以不使用令牌就提交表单。