2015-02-24 36 views
1

我有一個應用程序,我想要使用安全令牌來實現對CSRF的保護,但是如果他打開一個新選項卡,也可以讓我的應用程序可用於同一用戶。如何使用多選項卡支持實現反CSRF令牌保護?

當用戶使用正確的用戶名/密碼組合認證自己時,我將其添加到會話並返回包含該令牌的cookie。當cookie到達時,我從cookie中刪除令牌並將其存儲在全局變量中。對於每個請求,我都會添加令牌並將其與服務器上的令牌進行比較。

問題是,當我打開一個新選項卡時,用戶會自動從會話中刪除,因爲收到了不包含正確標記的請求。

我明白,如果我將該標記存儲在cookie或localStorage中,我將能夠從另一個標籤中讀取它,並且請求將有效,但我不確定此實現有多安全,甚至不知道一個更好?用一個簡單的XSS,你可以從cookie/localStorage的/全局變量讀令牌......

是否有我可以實現一個CSRF令牌保護和仍然能夠從其他瀏覽器選項卡中使用我的應用程序的任何其他方式?

+0

我不只是提交表單,我還在ajax背景中做了很多同步方法。 – 2015-02-24 11:56:37

回答

2

用一個簡單的XSS,你可以從Cookie讀取/ localStorage的/全局變量令牌......

如果你的網站很容易受到XSS那麼這始終取代任何CSRF漏洞。

只要每次新會話都刷新CSRF令牌,就不需要在使用CSRF令牌後再更改它。攻擊者無法讀取令牌,因此沒有額外的風險。

這將使標記可以在不損失安全性的情況下跨標籤工作。

+0

是的,但CSRF令牌如何在新標籤頁/窗口中可見?我具體談論這種情況 - http://stackoverflow.com/questions/35248449/csrf-token-in-new-tab-and-browser-window – 2016-02-07 17:09:50