JAVA年度安全 第六週 阻止CSRF

原文地址:

http://www.jtmelton.com/2012/02/07/year-of-security-for-java-week-6-csrf-prevention-in-java/

Whatis it and why should I care?

跨站點請求僞造(CSRF)是指受害者當被一個網站授權後,在其未知覺的情況下被強行向這個網站發起一個未知的或者未期望的請求。網站的授權憑證通常以瀏覽器的cookie方式保存,每次請求會自動傳送到服務器。利用這種原理,攻擊者可以誘使受害者對網站執行幾乎所有存在CSRF漏洞的請求。

下面圖片簡要揭示了CSRF攻擊的基本流程:

crsf flow

第一步:誘使受害者訪問一個惡意網站(evil.com)

第二步:受害者的瀏覽器加載擁有一個隱藏圖片的惡意網站,這張圖片有一個指向目標網站good.com的腳本指令。

第三步:受害者的瀏覽器將good.com會話cookie(通常是認證信息)發送到good.com上,並且在good.com上執行這個指令

第四步:指令執行之後受害者才知道結果,或者全然不知。

Whatshould I do about it?

既然知道了CSRF的原理和危害,那考慮一些解決方案:

 

Token令牌

經典的CSRF解決方案是爲每個session分配一個token(例如同步標誌位設計方案):

基本流程:

第一步:用戶登陸之後,將一個隨機字符串放到用戶session中

第二步:在所有的非冪等性的表單提交請求中(意思是任何修改服務器狀態的請求應該是通過HTTP Posts的方式提交的),當表單提交的時候,token也是其中的一個請求參數。

第三步:負責這個非冪等性請求的處理器會驗證提交進來的token參數是否和session中保存的token參數一致。如果提交的token缺失或者不一致,則拒絕這個請求。

 

經過多年的驗證這個方案能夠完美適用於幾乎所有的場景。但是也有缺點:

1、 實現這個方案很耗時間。

2、 特殊情況下能繞過某些請求的驗證。

 

ESAPI(https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API)項目內置基於授權模型的CSRF防護實現。這裏有一份我之前寫的關於ESAPI CSRF實現的文章:(http://www.jtmelton.com/2010/05/16/the-owasp-top-ten-and-esapi-part-6-cross-site-request-forgery-csrf/)

 

CSRFGuard

OWASP CSRFGuard項目(https://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project)是一個可靠的CSRF防護方案,使用這個方案僅僅需要在你的應用中添加一個filter和相應的配置文件。這是一個值得研究的項目。

 

Stateless CSRFProtection

還有一個有趣的防護實現是stateless CSRF方案(http://appsandsecurity.blogspot.com/2012/01/stateless-csrf-protection.html),作者是John Wilander(https://twitter.com/#!/johnwilander)。John提出一個有創意的想法:服務器端不需要在用戶會話中保存相應的token,由客戶端來生成一個防止CSRF Token的cookie(每次請求都提交到服務器),同時每次提交都將這個token當做一個請求參數。因爲攻擊者不能同時獲取到目標網站的token cookie和token請求參數,服務端只需要驗證這個token請求參數和token cookie是否一致就可以了。在我的印象中,這個方案還沒有被廣泛的測試驗證過,但能夠優雅解決這個複雜的問題,或許時間能夠證明stateless CSRF是一個更好的方案。

 

CSRF攻擊是一個流行且危險的攻擊方式,但是通過上面的防護方案,就能妥善解決這個風險。

 

最後需要注意的是token令牌方式在有XSS漏洞的網站上是無法起作用的。因爲攻擊者可以根據XSS漏洞讀取當前正在使用的token令牌,這樣就能夠繞過基於Token方式的防護方案。解決方法很簡單:修復XSS漏洞!

 

References
———–
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet
http://www.cgisecurity.com/csrf-faq.html
http://www.jtmelton.com/2010/05/16/the-owasp-top-ten-and-esapi-part-6-cross-site-request-forgery-csrf/
https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API
https://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章