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