gpt4 book ai didi

ruby-on-rails - Rails4 ActionController::InvalidAuthenticityToken 错误

转载 作者:行者123 更新时间:2023-12-03 13:56:20 24 4
gpt4 key购买 nike

我有 Rails4 应用程序在生产中运行,我的访问者偶尔会遇到 ActionController::InvalidAuthenticityToken 错误,我无法重现。我每天收到 2-4 条来自各种形式的通知,背后没有明确的逻辑。我收到的报告显示表单提交的authentity_token 与 session 中保存的不同。这怎么可能?我自己设法遇到了几次问题,但是无法重现,突然间,该表单的authentity_token与存储在 session 中的不同,并且出现了InvalidAuthenticityToken。
任何想法从哪里开始寻找?

例子:

 Request:
-------------------------------

* URL : https://domain/signin
* HTTP Method: POST
* IP address : 113.96.xx.xx
* Parameters : {"utf8"=>"✓", "authenticity_token"=>"MOh9JDE1AZ0CbIw/M33vfhjRShwzI6oqMhi8lk+n7OE=", "email"=>"xxxx@xxx", "password"=>"[FILTERED]", "commit"=>"Sign In", "controller"=>"clients", "action"=>"signin", "locale"=>"en"}

-------------------------------
Session:
-------------------------------

* session id: [FILTERED]
* data: {"_csrf_token"=>"QazCSVGeZlxEh83XTM+f5PkC/zopwCF96yV4duRats0="}

更新:想补充一点,我通过两个负载平衡的 AWS EC2 实例为页面提供服务,并将 session 存储在 Redis ElastiCache 实例中

最佳答案

Rails 生成的任何表单(即使用 form_for 等,而不是您将 <form> 放入模板中)将在必要时将反 CSRF token 添加为隐藏字段。如果你自己编写了表单并且没有包含 CSRF 隐藏输入,那么 Rails 依赖于 CSRF 元标记和 JavaScript 来工作。因此,如果您编写了自己的表单并且没有包含隐藏字段,并且客户端的 JavaScript 由于某种原因无法正常工作,您可能会收到此错误。因为“客户端的 JavaScript 因任何原因无法工作”子句很难检测和调试,所以我实际上有意删除了我网站上的 CSRF 元标记。这样,如果我忘记包含隐藏的输入,它会为每个人打破(快速失败),我会立即发现它,我可以修复它。我建议你也这样做。

话虽如此,我建议您查看这些“访客”的访问日志。你有什么奇怪的吗?

  • 他们是否在提交表单之前立即访问了包含表单的页面?如果不是,也许它们是机器人或实际的、真实的 CSRF 尝试(这就是正在检查的内容,不是吗?:))。
  • 他们是否将表单加载到一个 EC2 上并最终提交给另一个?如果是这样,您能否关闭一台 EC2 并查看错误是否消失?
  • 他们是否以某种方式失去了 session ?这可能是您的问题,也可能是他们的问题。
  • 关于ruby-on-rails - Rails4 ActionController::InvalidAuthenticityToken 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20221211/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com