我们在 Rails 4.1 应用程序中看到了一个不幸且可能基于浏览器的 CSRF 令牌真实性问题。我们在这里发布它是为了询问社区其他人是否也看到它。
请注意,大多数错误报告工具(如 Honeybadger)会自动抑制ActionController::InvalidAuthenticityToken,因此您通常不会在错误报告工具中看到问题,除非您特意去查看它。
这就是问题所在,这不是一个开发问题——它是一个尚未诊断的生产问题。
我们看到的异常只是正常登录我们网站时的 ActionController::InvalidAuthenticityToken。在仔细检查表单发送的authentity_token和会话的_csrf_token(我们使用active_record_store 作为我们的session_store 设置)后,它们只是不匹配。经过直接检查,我只能得出结论,它们是完全不同的令牌,但我不知道为什么。
我们广泛地看到了这个问题,大概是我们高流量网站的 1-2%。我只在生产中看到它,我无法在开发中重现它。
我在 IE 11 和 Edge 浏览器上看到它最多(你会注意到 Rails 4.1 是在 IE 11 和 Edge 之前发布的),但也在 Android 上的 Chrome 和偶尔的移动 Safari 上看到。
我们的缓存控制标头设置如下:
Cache-Control: max-age=0, private, must-revalidate