2009-05-23 36 views
7

我們目前正在開發完全基於AJAX的應用程序,該應用程序將通過RESTful API與服務器進行交互。我已經考慮了潛在的方案來防止針對API的XSRF攻擊。AJAX風格的XSRF保護應用程序

  1. 用戶認證和接收 會話cookie,這也是 雙提交與每個請求。

  2. 我們 的Javascript實現的OAuth用戶,檢索令牌時 在用戶登錄,並簽署所有 請求與該令牌。

我傾向於OAuth方法,主要是因爲我想提供第三方訪問我們的API,我寧可不必實現兩個身份驗證方案。

OAuth消費者在這種情況下不會有任何原因嗎?

回答

0

阻止XSRF檢查每個RESTful請求的引用者以確保請求來自同一個域的最簡單方法。會話cookie對於保持狀態非常重要,但它不會抵禦XSRF,因爲它也會被髮送僞造的請求。在內存有限的嵌入式網絡硬件上看到基於引用的XSRF保護系統很常見,摩托羅拉在其大多數硬件上都使用這種方法。這不是最安全的XSRF保護,基於令牌的保護更好,但兩個系統仍然可以繞過XSS。基於令牌的XSRF保護最大的問題是需要花費大量的時間來修復每個請求,並且您可能會錯過一些請求。

請務必閱讀same origin policyscan your site for xss。您還應該閱讀2010年的OWASP Top 10 A3-Broken Authentication and Session Management

4

大多數AJAX庫會設置一個額外的頭文件「X-Requested-With:XMLHttpRequest」,這在基本的XSRF攻擊中很難僞造(儘管可能與XSS結合使用)。如果您希望所有請求都是AJAX,那麼驗證此標頭是否存在是一種很好的縱深防禦策略。

1

使用兩步請求,第一個請求服務器一個不可預知的標記,第二個請求使用該標記請求實際的操作。由於攻擊者無法預測令牌,並且無法讀取它(相同的源策略),因此他無法在第二個查詢中提供有效的令牌。

但是要小心,不要泄露令牌(瞭解如何使用捕捉JSON當他們影響值的全局變量等)和讀:

http://www.google.com/search?q=xsrf+defence