2017-10-19 86 views
0

這是從部署到Datica(基於Docker)的Rails 4應用程序(又轉而從Rails 3應用程序遷移)遷移而來的Rails 5.1 Web應用程序, 。Rails部署導致「無法驗證CSRF令牌真實性」

每次部署之後,我們的日誌會記錄「無法驗證CSRF令牌可靠性」警告和相應的401個狀態。前端是一個React應用程序,大多數客戶端 - 服務器通信都是通過XHR進行的,因此有些人多次接收401次。刷新瀏覽器已經爲我解決了401狀態兩次,所以我認爲峯值的下降表明人們刷新或停止使用該應用程序,因爲它不適用於他們(請參閱顯示峯值的日誌圖的屏幕截圖) 。

該應用使用cookie進行會話存儲。 CSRF令牌在第一次加載時位於頁面的主體中。我觀察到的情況可以通過給出一個新的CSRF令牌來解釋,以便頁面正文和會話中的CSRF令牌不匹配,但我不明白會導致服務器部署後發佈新的CSRF令牌。

想這可能在新推出的情況下,接收Origin頭,或舊的情況下停止接收它的延遲是因爲,我在application.rb中設置config.action_controller.forgery_protection_origin_check = false。但是,昨天晚上和今天上午再次部署後出現了尖峯(並且由於刷新瀏覽器似乎解決了這個問題,所以它無論如何都沒有意義)。

關於部署如何導致服務器向會話發出新的CSRF令牌的任何想法?或者其他想法或其他假設?

謝謝!

graph of 401 spikes

回答

1

的問題是,MyApp::Application.config.secret_key_base從未設置過。當應用程序從Rails 3遷移到4時,建議等到用戶羣完全在4之後再取消註釋該行。但那從未發生過。

我假設如果沒有設置secret_key_base,它會自動生成一個用於生成CSRF令牌的內存中的密鑰庫,從而在每次部署時產生一個新的密鑰庫。

相關問題