2016-08-05 20 views
2

我有一個請求使用嵌入在頁面中的一次性令牌來確保CSRF保護 - 攻擊者可以欺騙我的用戶進行非法請求,但他們無法獲得令牌,即使他們能夠根據每個請求更改並且可以過期。CSRF保護服務工作者後臺同步的最佳實踐模式

到目前爲止,這麼安全。

我想實現與服務工作者的後臺同步,因此用戶可以離線發佈數據,然後在他們獲得連接後再發送該數據。

但是,這意味着該頁面不可用於獲取CSRF令牌,並且在用戶構建該請求時與請求鏈接的任何令牌可能在數據實際發送時無效。

這似乎是任何漸進式網站的普遍問題,處理它的最佳做法是什麼?

我認爲後臺同步可以請求一個新的令牌,將它應用到要發送的數據然後發送它,這仍然是一個CSRF攻擊者無法利用的循環,但我是不確定。任何人都可以證實這種方式嗎?

服務工作人員或後臺同步有一些功能我缺少嗎?

回答

1

我沒有資格談論關於CSRF主題的「最佳實踐」,但從我對OWASP guidelines on CSRF的理解中,您的想法是正確的。

目前,我以類似的方式使用OAuth:單個客戶端發出刷新和不記名令牌。刷新令牌的生命期明顯長於不記名令牌。客戶可以選擇使用刷新令牌來刷新新的持票人令牌。有些客戶可能會選擇「全速輪換」,這是每次請求時的新手。有些人可能會選擇使用持票人,直到它報告失敗,然後再製作新的。

在您的方案中,您的後臺同步將請求並接收刷新和承載令牌。它可以繼續前進,並使用持有者令牌構建URL,然後在嘗試失敗時進行同步時,使用刷新令牌來爲新的承載者創建一個新的承載並使用新的承載者重建URL。當然,如果刷新已過期(或已被撤銷),那麼你離線的時間太長了,你需要回應。

+0

爲響應而歡呼 - 我有點想到了類似的東西,但我確信有安全專家可以在我看來挑選漏洞。 – Keith

+0

也許最好遷移到http://security.stackexchange.com/... – bishop

+0

可能,儘管我注意到答案並不是特定於我錯過的服務工作者的實現,在這種情況下我更有可能在這裏得到答案。 – Keith