錢 麗,張 濤
(1.安徽新華學(xué)院;2.中國(guó)科學(xué)技術(shù)大學(xué))
XSS是跨站腳本攻擊,又稱CSS,全稱Cross SiteScript,它是Web程序中常見的漏洞,屬于被動(dòng)式且用于客戶端的攻擊方式.其原理是攻擊者向有XSS漏洞的網(wǎng)站中輸入惡意的HTML代碼,當(dāng)其它用戶瀏覽該網(wǎng)站時(shí),這段HTML代碼會(huì)自動(dòng)執(zhí)行,從而達(dá)到攻擊的目的[1].XSS攻擊有內(nèi)部和外部攻擊兩類,內(nèi)部攻擊主要利用程序自身漏洞構(gòu)造跨站語句;外部攻擊主要是構(gòu)造XSS跨站漏洞網(wǎng)頁,或者尋找非目標(biāo)機(jī)以外的有跨站漏洞的網(wǎng)頁[2-4].攻擊者利用XSS漏洞劫持Cookie、獲取用戶系統(tǒng)信息、破壞頁面結(jié)構(gòu)、重定向到其它網(wǎng)站等[5],XSS攻擊對(duì)web網(wǎng)站產(chǎn)生很大的危害.
目前針對(duì)XSS漏洞的研究主要集中于檢測(cè)某類安全漏洞方法,例如網(wǎng)絡(luò)爬蟲的搜索技術(shù)、錯(cuò)誤數(shù)據(jù)生成技術(shù)、漏洞識(shí)別技術(shù)等多種技術(shù),這些方法容易造成Web應(yīng)用程序安全檢測(cè)的瓶頸.還有設(shè)定在服務(wù)器端進(jìn)行XSS攻擊檢測(cè)的算法研究,這些算法存在應(yīng)用性不強(qiáng)、檢測(cè)率不高的缺陷[6-10].該研究針對(duì)Web應(yīng)用中XSS漏洞的各種攻擊,提出了XSS漏洞檢測(cè)和防御方法.該方法在Web安全漏洞檢測(cè)過程中可有效識(shí)別和防范XSS漏洞攻擊,實(shí)驗(yàn)結(jié)果證明,該防御方法具有較高的應(yīng)用性和推廣性.
目前有近75%的漏洞屬于反射型XSS漏洞攻擊,由于利用這種漏洞需要設(shè)計(jì)一個(gè)包含嵌入式JavaScript代碼的請(qǐng)求,隨后這些代碼又被反射到任何提出請(qǐng)求的用戶,因而它被稱作反射型XSS[11].由于此種類型的攻擊代碼存在于 URL中,所以黑客通過誘騙或加密變形的方式將存在惡意代碼的鏈接發(fā)給用戶,用戶點(diǎn)擊后受到攻擊.如果一個(gè)WEB應(yīng)用程序使用動(dòng)態(tài)頁面?zhèn)鬟f參數(shù)向用戶顯示錯(cuò)誤信息,也有可能會(huì)造成XSS漏洞,這種頁面使用一個(gè)包含消息文本的參數(shù),并在頁面加載時(shí)將文本返回給用戶.例如,通過程序傳遞參數(shù)到HTML頁面,打開下面網(wǎng)址將會(huì)返回一個(gè)消息提示:
http://fovweb.com/xss/message.php?send=Hello,World!
輸出內(nèi)容“Hello,World!”,此程序功能為提取參數(shù)中的數(shù)據(jù)并且插入到加載頁面的HTML代碼中,這是XSS漏洞的一個(gè)明顯特征,如果此程序沒有經(jīng)過過濾等安全措施,則會(huì)容易受到攻擊.
存儲(chǔ)型XSS腳本攻擊是指黑客把攻擊腳本上傳到Web服務(wù)器上,用戶在訪問該服務(wù)器頁面的時(shí)候輸入的數(shù)據(jù)被保存在服務(wù)器中,網(wǎng)頁進(jìn)行數(shù)據(jù)查詢時(shí)用戶個(gè)人信息可能被竊取,存儲(chǔ)型XSS具有較強(qiáng)的穩(wěn)定性[12].存儲(chǔ)型XSS攻擊比較常見的情況是黑客將惡意代碼直接寫入新聞、微信、博客的文章評(píng)論中,用戶在瀏覽文章評(píng)論的過程中,其客戶端瀏覽器執(zhí)行這些惡意代碼,導(dǎo)致用戶系統(tǒng)上執(zhí)行了木馬程序,XSS的攻擊過程如下:
(1)黑客在網(wǎng)頁中插入XSS惡意代碼,然后SetCookie給瀏覽器;
(2)瀏覽器運(yùn)行時(shí)提交包含XSS代碼的Cookie;
(3)網(wǎng)頁從Cookie中取出包含XSS代碼的某些變量,同時(shí)將該變量作為部分頁面內(nèi)容返回給客戶端;
(4)用戶客戶端執(zhí)行這些XSS惡意代碼.
XSS惡意代碼不僅存在用戶客戶端Cookie中,而且也會(huì)存在管理服務(wù)器端,尤其針對(duì)支持多語言版本的網(wǎng)站系統(tǒng).用戶在多語言版本網(wǎng)站上設(shè)定語言時(shí),這些變量會(huì)被存在頁面的Cookie里或者網(wǎng)站服務(wù)器中,例如,一些網(wǎng)站頁面中有以下函數(shù):
上面代碼中l(wèi)c_all變量是從客戶端Cookie或服務(wù)器取出,用戶客戶端URL請(qǐng)求如下:
其中“en_US;return LC_ALL;}alert("XSS");function dummy(){a=”這段代碼被作為語言信息保存,瀏覽器再一次訪問網(wǎng)站頁面時(shí),以上函數(shù)變成:
由于該語言文件網(wǎng)站全局部署,所以網(wǎng)站每個(gè)頁面可能會(huì)包含以上代碼,這樣“木馬”長(zhǎng)存于網(wǎng)站系統(tǒng)中,導(dǎo)致用戶每次訪問該網(wǎng)站頁面,都會(huì)執(zhí)行這些惡意XSS代碼.
XSS攻擊是利用XSS漏洞來劫持已通過驗(yàn)證的用戶的會(huì)話,劫持到已驗(yàn)證的會(huì)話后,攻擊發(fā)起者則擁有該授權(quán)用戶的所有權(quán)限,利用反射型XSS漏洞進(jìn)行會(huì)話權(quán)限劫持,其攻擊步驟如下:
(1)用戶正常登錄Web應(yīng)用程序,登錄成功會(huì)得到一個(gè)會(huì)話信息的cookie;
(2)攻擊者將含有攻擊代碼的URL發(fā)送給被攻擊用戶;
(3)用戶打開攻擊者發(fā)送過來的URL;
(4)同時(shí)也會(huì)執(zhí)行該URL中所含的攻擊者的JavaScript代碼;
(5)攻擊者在得到用戶的cookie信息后,將可以利用這些信息來劫持用戶的會(huì)話,以該用戶的身份進(jìn)行登錄.
XSS漏洞檢測(cè)可以采用黑盒測(cè)試方法,模擬黑客的攻擊手段在所有可能的數(shù)據(jù)輸入接口處嘗試進(jìn)行XSS注入.通過觀察注入后的數(shù)據(jù)頁面是否出現(xiàn)被注入的現(xiàn)象,即可確實(shí)是否存在XSS漏洞.谷歌瀏覽器一般會(huì)屏蔽XSS漏洞,所以一般測(cè)試XSS漏洞會(huì)選擇IE瀏覽器.
該文在此構(gòu)架一個(gè)存在XSS漏洞的學(xué)生管理網(wǎng)站系統(tǒng),下面將以實(shí)例講解如何檢測(cè)XSS漏洞,打開學(xué)生管理頁面,其中學(xué)號(hào)輸入框的html代碼為:
可以看到的是輸入框的value是空,那么在接下來在輸入框中輸入的內(nèi)容就是value值,
(1)在學(xué)號(hào)文本框中輸入:“/><script>alert(“XSS”);</script> <input value=”,就會(huì)形成一個(gè)新的html代碼:
可以看到html代碼已經(jīng)形成了兩個(gè)input標(biāo)簽和一個(gè)JavaScript,其實(shí)XSS漏洞就是利用非法的輸入達(dá)到攻擊目的.
(2)點(diǎn)擊查詢查看頁面,如果頁面顯示出異常,那么此處存在著XSS漏洞的風(fēng)險(xiǎn),查詢結(jié)果如圖1所示:
圖1 查詢結(jié)果
如何有效地進(jìn)行XSS跨站腳本攻擊的防范一直都是瀏覽器廠商和網(wǎng)站安全技術(shù)人員關(guān)注的問題.現(xiàn)在很多瀏覽器程序中添加補(bǔ)丁防范XSS跨站腳本攻擊,如IE瀏覽器從IE8開始內(nèi)置了 XSS篩選器,F(xiàn)irefox也有相應(yīng)的 CSP、Noscript擴(kuò)展等.而對(duì)于WEB網(wǎng)站安全技術(shù)人員來說,需要驗(yàn)證用戶輸入字符的長(zhǎng)度和形式,注意URL的HTTP引用頭和一些查詢關(guān)鍵字的用法.目前XSS跨站腳本攻擊的防范技術(shù)主要利用HttpOnly和過濾非法字符實(shí)現(xiàn).
(1)利用HttpOnly
HttpOnly技術(shù)目前已經(jīng)被多款流行瀏覽器廠商所采用,HttpOnly的作用不是過濾XSS跨站腳本攻擊,而是瀏覽器將禁止頁面的Javascript訪問帶有HttpOnly屬性的Cookie,解決XSS跨站腳本攻擊后的Cookie會(huì)話劫持行為.
(2)過濾非法字符
由于兩種XSS跨站腳本攻擊類型的漏洞成因可不相同,輸入檢查是對(duì)可信字符的檢查或者輸入數(shù)據(jù)格式的檢查,例如用戶輸入的注冊(cè)賬號(hào)信息中只允許包括字母、數(shù)字、下劃線和漢字等.?dāng)?shù)據(jù)格式都具有一定的格式規(guī)范,如IP地址、電話號(hào)碼、郵件地址、日期等數(shù)據(jù),只有符合數(shù)據(jù)規(guī)范的輸入信息才允許通過檢查.常見的可能造成XSS跨站腳本攻擊的字符及其HTML編碼見表1.除了常用的編碼外,任何字符都可以使用其ASCII碼進(jìn)行HTML編碼.
表1 需要編譯的常見字符
下面通過實(shí)例來說明XSS漏洞帶來的強(qiáng)大破壞性,“留言板”功能模塊作為一般用戶可以使用和瀏覽的公共模塊,接下來實(shí)施攻擊操作.
(1)首先測(cè)試一下板塊是否存在著XSS漏洞,在留言板輸入框中輸入:
<script>alert("張三")</script>,然后點(diǎn)擊提交,得到的結(jié)果如圖2所示,說明“留言板”模塊存在著XSS漏洞.
圖2 檢測(cè)XSS漏洞
(2)黑客在留言板文本框中輸入
< a href="http://127.0.0.1:9090/message/login.jsp"style="color:red;"> 點(diǎn)擊進(jìn)入系統(tǒng)領(lǐng)獎(jiǎng)臺(tái)</a>
留言板輸出結(jié)果如圖3,黑客輸入的內(nèi)容已經(jīng)被JSP引擎解析成了頁面標(biāo)簽,輸出顯示“點(diǎn)擊進(jìn)入系統(tǒng)領(lǐng)獎(jiǎng)臺(tái)“鏈接.
圖3 XSS漏洞輸出頁面
(3)黑客已經(jīng)成功的注入了一個(gè)非法鏈接,如果在鏈接頁面掛上木馬,那么普通用戶登錄留言板,點(diǎn)擊這個(gè)鏈接就會(huì)被攻擊.
(4)用戶點(diǎn)擊鏈接后顯示的是空白頁,這時(shí)用戶留言板的登錄信息被黑客竊取,黑客用郵箱接受到“zhangsan”登錄用戶的密碼,如圖4所示.
圖4 發(fā)起留言者郵箱接收
如果黑客制作一個(gè)網(wǎng)銀釣魚網(wǎng)站鏈接,用戶在點(diǎn)擊該鏈接后,其銀行卡信息極有可能會(huì)被竊?。?/p>
XSS漏洞給網(wǎng)站系統(tǒng)帶來很大的破壞,XSS漏洞最直接的預(yù)防手段就是轉(zhuǎn)義和過濾,下面針對(duì)留言板功能模塊進(jìn)行XSS漏洞的預(yù)防.
(1)轉(zhuǎn)義字符是不會(huì)被jsp頁面編譯,會(huì)直接在頁面顯示出來,在JS方法中添加一個(gè)簡(jiǎn)單的方法replaceAll()代碼如下:
(2)在留言板輸入框中輸入:<script>alert()</script>,頁面沒有彈窗,而是正常地將輸入內(nèi)容輸出.
(3)繼續(xù)在輸入框中輸入<a href=""style="color:red">點(diǎn)擊測(cè)試</a>,結(jié)果也是正常地輸出在頁面中,如圖5所示.
圖5 防御XSS漏洞測(cè)試
以上實(shí)例就是對(duì)XSS漏洞進(jìn)行地防御,在replaceAll()方法中轉(zhuǎn)義了“<”和“>”字符.為了使網(wǎng)站系統(tǒng)的更加健全,可以針對(duì)系統(tǒng)添加更多的轉(zhuǎn)義或過濾字符.這樣也就達(dá)到了防御XSS漏洞的目的.
隨著Web應(yīng)用技術(shù)的發(fā)展,XSS漏洞嚴(yán)重威脅了網(wǎng)站系統(tǒng)的安全,XSS漏洞攻擊具有覆蓋面廣、隱蔽性高、危害性大等特點(diǎn).該文構(gòu)架一個(gè)存在XSS漏洞的網(wǎng)站系統(tǒng),通過模擬進(jìn)行XSS漏洞攻擊,解析了反射型XSS漏洞攻擊與存儲(chǔ)型XSS攻擊類型的危害,提出相應(yīng)的XSS漏洞檢測(cè)與防御方法.實(shí)驗(yàn)結(jié)果證明,該防御方法在Web安全漏洞檢測(cè)過程中可有效識(shí)別和防范XSS漏洞攻擊,具有較高的應(yīng)用性和推廣性.
[1] 馬小婷,胡國(guó)平,李舟軍.SQL注入漏洞檢測(cè)與防御技術(shù)研究[J].計(jì)算機(jī)安全,2012(1):48-66.
[2] 黃鋒,吳華瑞.基于J2EE應(yīng)用的SQL注入分析與防范[M].北京:高等教育出版社,2011.96-116.
[3] 錢麗.SQL注入攻擊原理及其防范技術(shù)研究[J].哈爾濱師范大學(xué)自然科學(xué)學(xué)報(bào),2014(6):65-68.
[4] 馬小婷,胡國(guó)平,李舟軍.SQL注入漏洞檢測(cè)與防御技術(shù)研究[D].上海:東華大學(xué),2013.
[5] 王紅兵.Web站點(diǎn)安全體系結(jié)構(gòu)的研究與設(shè)計(jì)[J].哈爾濱工業(yè)大學(xué)學(xué)報(bào),2012(2):18-49.
[6] 龍娟.Web站點(diǎn)安全評(píng)估研究[J].計(jì)算機(jī)應(yīng)用研究,2012(14):7-12.
[7] 沈壽忠.基于網(wǎng)絡(luò)爬蟲的SQL注入與XSS漏洞挖掘[D].江西:江西師范大學(xué),2014.
[8] 萬芳芳.Web跨站腳本漏洞檢測(cè)工具的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2012(6):21-25.
[9] 陳建青,張玉清.基于網(wǎng)絡(luò)爬蟲的XSS漏洞檢測(cè)技術(shù)[J].計(jì)算機(jī)工程,2012(8):45-52.
[10]劉海,徐芳,郭帆.防范XSS攻擊的研究綜述[D].天津:南開大學(xué),2011.
[11]羅衛(wèi)敏,劉井波,劉靜,等.XSS蠕蟲在社交網(wǎng)絡(luò)中的傳播分析[D].上海:華東師范大學(xué),2013.29-32.
[12]邱永華.XSS跨站腳本攻擊剖析與防御[C].中國(guó)高??萍计诳芯繒?huì).電子科技專輯.北京:北京大學(xué)出版社,2013.19-22.