劉達(dá)
1 引言
跨站腳本攻擊(Cross SiteScript,XSS)是指惡意的攻擊者利用Web程序的安全漏洞,從客戶(hù)端提交有含有惡意代碼的表單內(nèi)容或向他人發(fā)送含有惡意腳本的超鏈接以盜取用戶(hù)Cookie信息,甚至獲得管理員權(quán)限的網(wǎng)絡(luò)攻擊手段。目前針對(duì)XSS攻擊的防御手段主要有提高瀏覽器的安全性能,在Web服務(wù)器端部署用戶(hù)輸入過(guò)濾器等方式,但面對(duì)XSS日新月異的攻擊手段,防御的一方總是處于被動(dòng)。針對(duì)上述問(wèn)題,本文對(duì)如何在開(kāi)發(fā)環(huán)節(jié)中對(duì)HTML網(wǎng)頁(yè)的輸入,輸出數(shù)據(jù)進(jìn)行編碼以防范XSS攻擊進(jìn)行研究,并提出了相應(yīng)的編碼規(guī)范。
2 XSS攻擊原理
XSS跨站腳本是指惡意攻擊者巧妙利用Web應(yīng)用程序在數(shù)據(jù)輸入和輸出過(guò)程中漏洞,將惡意代碼嵌入網(wǎng)頁(yè)或RUL,當(dāng)用戶(hù)瀏覽網(wǎng)頁(yè)或點(diǎn)擊鏈接訪問(wèn)網(wǎng)站時(shí),惡意代碼被執(zhí)行,用戶(hù)遭到攻擊。XSS攻擊類(lèi)型可分為DOM Based XSS和Stored XSS。
2.1 DOM Based XSS
DOM Based XSS是一種基于網(wǎng)頁(yè)DOM結(jié)構(gòu)的攻擊。攻擊者在研究了目標(biāo)用戶(hù)所訪問(wèn)的網(wǎng)站URL結(jié)構(gòu)并猜測(cè)出目標(biāo)網(wǎng)站的頁(yè)面處理方式后,向目標(biāo)用戶(hù)發(fā)送含有惡意腳本的目標(biāo)網(wǎng)站鏈接。例如,網(wǎng)站A的Url結(jié)構(gòu)是根據(jù)Content參數(shù)返回顯示頁(yè)面的。攻擊者則可設(shè)計(jì)如下含惡意腳本的鏈接:
http://www.a.com?content=
該鏈接被執(zhí)行后,用戶(hù)的Cookie信息被攻擊者獲取,且頁(yè)面將跳轉(zhuǎn)至攻擊搭建的B網(wǎng)站,繼續(xù)騙取用戶(hù)的賬號(hào)與口令。這種攻擊方式又被稱(chēng)為反射型XSS。
2.2 Stored XSS存儲(chǔ)式XSS漏洞
Stored XSS存儲(chǔ)式漏洞,又稱(chēng)為持久性跨站腳本攻擊,其原理是通過(guò)網(wǎng)頁(yè)表單將惡意腳擊提交到網(wǎng)站服務(wù)器嵌入Web頁(yè)面中,所有瀏覽該頁(yè)面的用戶(hù)客戶(hù)端都將受到惡意腳本的攻擊。
例如,網(wǎng)站A的留言板未對(duì)用戶(hù)輸入內(nèi)容進(jìn)行完善的過(guò)濾,惡意攻擊者在留言板中輸入惡意代碼
網(wǎng)站的輸出機(jī)制未過(guò)濾