徐淑芳 郭帆 游錦鑫
摘 要:跨站點請求偽造(CSRF)是一種對網站的惡意利用,它通過偽裝來自受信用用戶的請求利用受信任的網站,通過社會工程誘導受害者發送一些惡意請求。本文在闡述了CSRF的原理基礎上,設計了一個基于服務器端CSRF防御模塊,最后該方法與其他工具進行對比實驗,結果表明,該方法可以更高效地防御CSRF攻擊。
關鍵詞:Web安全;CSRF攻擊;過濾器
1 引言
隨著Web技術的快速發展,人們進入了一個豐富多彩的虛擬互聯網世界。各種基于Web應用的業務模式不斷成熟,大量的安全漏洞和威脅也隨之而來,基于Web的攻擊稱為惡意攻擊者的主要方式和手段。目前主要的幾種Web安全漏洞有跨站腳本攻擊、SQL注入、CSRF、惡意文件執行等。其中CSRF是一種廣泛存在的網絡漏洞,由于很多安全工程師不太理解他的利用條件和危害,因此不予重視,但是CSRF在某些時候卻能產生強大的破壞性。
2 CSRF攻擊原理
3 基于服務器端CSRF防御模塊的設計與實現
3.1 基于服務器端CSRF防御模塊的設計
本文的工作以加入一次性令牌方法為基礎,提出了基于服務器端添加CSRF防御模塊,該模塊在J2EE工作平臺設計,使用J2EE編寫Servlet過濾器和JavaScript技術實現。其設計思路是通過攔截服務器端和客戶端的請求與響應信息,并對這些信息進行處理。實現CSRF防御模塊功能,我們使用JavaScript腳本技術和Servlet過濾器來實現。當一個頁面由服務器發送時,過濾器自動地注入JavaScript到頁面中。該方法中,Token自動插入Html頁面請求中。過濾器是Web程序中的可重用組件,作為客戶端與目標資源間的中間層組件,用于攔截客戶端的請求與相應信息。當Web容器收到一個客戶端請求時,將判斷此請求是否與過濾器對象相關聯,如果關聯,則將這一請求交給過濾器進行處理。此外,在網絡安全漏洞檢測系統也經常用到過濾器作為輔助模塊。
接下來我們來描述整個CSRF防御流程。
(1)首先,用戶登錄后,發送頁面請求到服務器,在這之前先經過FCSRF過濾器攔截再轉發到服務器;(2)服務器發送響應頁面,FCSRF過濾器收到響應后對響應頁面插入腳本標簽,再轉發到用戶瀏覽器端;(3)頁面達到瀏覽器端后,腳本標簽對頁面表單插入Token操作;(4)用戶提交表單時頁面信息與Token值一同提交,提交到服務器前,過濾器先攔截用戶請求,并檢查Token是否存在,如果和當前會話保存的Token相匹配時,請求去除Token參數后被轉發到服務器;如果Token丟失或和當前會話保持的Token值不同時,請求被認為可能存在CSRF漏洞,請求去除cookies后并跳轉到錯誤頁面,提示請求被拒絕。
3.2 基于服務器端CSRF防御模塊的實現
該設計使用JDK6.0和Java EE6.0的開發環境,利用Servlet過濾器對客戶端和服務器端之間的請求和響應攔截并修改插入FCSRF腳本標簽,JavaScript動態創建的請求的處理使用了jQuery1.9.1在腳本部分添加,運用事件代理機制實現對動態創建的請求添加Token。
動態創建的請求是在運行在客戶端腳本所構造的請求,在頁面加載完后由JavaScript操作DOM動態創建產生的。jCSRF方法是通過在代理協議中添加jCSRF-java腳本標簽方法[9]實現對動態創建請求添加令牌。
4 實驗及結果比較
同時對jCSRF和CSRF Guard兩種工具做同樣的測試,并與之對比。實驗在Windows7平臺下進行,其他主要使用的軟件為WebScarab、Tomcat6.0.37和Firebug1.12.7。CSRFTestPHP根據三種工具部署實驗環境,并使用Firebug查看各處理表單頁面源代碼,記錄防御工具對不同的請求的Token參數的操作結果,總結數據如表2所示。
從表2測試結果中,可以看出本文設計的過濾器模塊對動態創建的請求添加了參數Token,能夠實現有效請求提交,對CSRF漏洞有防御作用,CSRFGuard對這類請求無法添加Token值可能提交失敗或遭到CSRF攻擊,jCSRF對GET請求不做處理,不能起到完全防御工作。
此外,若是站點針對CSRF攻擊采用了防御措施,如果站點存在XSS漏洞,XSS可以模擬客戶端瀏覽器執行任意操作,那么這個方案就會變得無效。在XSS攻擊下,攻擊者完全可以請求頁面后,獲得頁面內容里的Token值,然后再構造出一個合法的請求。因此,防御CSRF的同時需加強其他WEB安全漏洞。
5 結語
文中對CSRF已有的防御策略進行了總結研究,提出了一種新的基于服務器端構建過濾器模塊程序來驗證安全令牌。這對有效地防御WEB安全的CSRF攻擊很有意義。該方案通過在服務器端添加過濾器模塊,并對請求進行過濾,對沒有Token或Token不匹配的請求視為CSRF攻擊而阻止,能夠有效的防御CSRF漏洞。并且CSRF攻擊是一種隱蔽性強、破壞力強的網絡安全漏洞,在通過積極有效的針對性防御外,還需要增強其他Web安全漏洞防御,例如XSS、點擊劫持等。因此,安全界應該更加關注CSRF漏洞,實現更加安全優化的防御手段。
[參考文獻]
[1]陳振.CSRF攻擊的原理解析與對策研究[J].福建電腦,2009,25(6).
[2]劉梅,陳錦海,高揚,王駿,林超,張聲杰.基于IMM-CSRF的多平臺機動目標被動跟蹤方法[J].系統工程與電子技術,2011,33(1):1-0007.