2016-11-20 31 views
4

我們的webapp的一個組件是(或多或少)SPA。即它使用javascript運行,並且不會生成任何頁面查看或刷新。這可能會導致CSRF令牌過時。尤其是對於手機用戶而言,他們可能會在幾天/幾周後關閉瀏覽器並將其打開。此SPA偶爾需要POST更新到服務器。繞過XHR的CSRF保護安全嗎? (Rails)

我們看到,產生一個422錯誤一些JavaScript POST請求,具有約CSRF保護警告。我很確定CSRF令牌是存在的,但是陳舊。我試圖找到最好的方法。

如果我理解正確,並根據OWASP CSRF Cheat Sheet,XHR請求應該是安全的,只要CORS未在同一端點上打開即可。也就是說,惡意網站無法在沒有javascript的情況下使用XHR標頭製作請求。使用JavaScript,請求應該被阻止,因爲它是跨源的。

唯一的資源I found有一個比較容易混淆的編寫例子CSRF保護爲JSON禁用。我無法確定它是建議這樣做還是避免它。

是否因此安全/不安全關閉未啓用CORS用於在軌道上XHR/JSON請求CSRF保護?

+0

我創建了一個PR來更新Rails文檔。請參閱https://github.com/rails/rails/pull/31640 – gingerlime

回答

0

簡短的回答是,它安全,但你需要小心CORS。

下面是從文檔片段改變我suggested到軌:

它一般是安全的排除CSRF保護 (如上面的代碼段那樣)XHR請求,因爲XHR請求只能進行來自 的起源相同。但是請注意,任何跨域第三方域 允許通過CORS 也將能夠創建XHR請求。在禁用XHR的僞造保護之前,一定要檢查您的 CORS白名單。

請注意,我還沒有從鐵路團隊有關於此的任何反饋。