● 徐潔潔 /文
謹(jǐn)防跨站腳本攻擊,保障網(wǎng)站安全
● 徐潔潔 /文
在2007年、2010年、2013年統(tǒng)計(jì)的十大Web安全漏洞中,XSS漏洞始終位于前三。
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展及各行業(yè)數(shù)字化進(jìn)程的不斷推進(jìn),使得Web應(yīng)用在各行業(yè)均得到了廣泛的推廣及應(yīng)用,但是在Web應(yīng)用給用戶提供方便快捷服務(wù)的同時(shí),不法分子針對(duì)Web應(yīng)用相關(guān)安全漏洞的惡意攻擊屢屢出現(xiàn),因此對(duì)Web安全問(wèn)題進(jìn)行防范和檢測(cè)顯得非常重要。跨站腳本(Cross Site Scripting,簡(jiǎn)稱XSS)是一種在Web應(yīng)用程序中經(jīng)常出現(xiàn)的安全漏洞,一般是由于Web應(yīng)用程序?qū)τ脩舻妮斎脒^(guò)濾不足而產(chǎn)生的。世界上最知名的Web安全與數(shù)據(jù)庫(kù)安全研究組織OWASP(Open Web Application Security Project)在 2007年、2010年、2013年統(tǒng)計(jì)過(guò)十大Web安全漏洞,XSS漏洞始終位于前三。
XSS 的出現(xiàn)通常是由于Web應(yīng)用程序?qū)τ脩舻妮斎脒^(guò)濾不足,從而使得攻擊者可以利用網(wǎng)站的漏洞把惡意的腳本代碼注入到客戶端網(wǎng)頁(yè)中,當(dāng)用戶瀏覽此網(wǎng)頁(yè)時(shí),腳本就會(huì)在用戶的瀏覽器上執(zhí)行,從而達(dá)到攻擊者的目的。XSS根據(jù)用戶輸入數(shù)據(jù)以何種形式、何時(shí)觸發(fā)XSS、是否有后端服務(wù)器的參與劃分為三種類型:反射型XSS、持久型XSS和DOM XSS。
反射型XSS(Reflected Cross Site Scripting)也被稱為非持久型XSS,一般是攻擊者構(gòu)造一個(gè)包含惡意代碼的URL,然后通過(guò)即時(shí)通信軟件或電子郵件等方式將該URL發(fā)送給用戶,誘使用戶訪問(wèn),當(dāng)用戶點(diǎn)擊這些專門設(shè)計(jì)的鏈接時(shí),惡意腳本就會(huì)在其本地瀏覽器中執(zhí)行。由于這種攻擊只在用戶點(diǎn)擊訪問(wèn)URL時(shí)觸發(fā)一次,是非持久化的,所以稱為反射型XSS。
圖1給出了一個(gè)存在反射型XSS漏洞的代碼片段,該程序采用PHP語(yǔ)言編寫。假設(shè)訪問(wèn)地址為http://localhost/test.php,我們構(gòu)造這樣的url:http://localhost/test.php?key=,其效果相當(dāng)于在文本框里 輸 入:,然后點(diǎn)擊提交。我們?cè)诘刂窓谳斎朐搖rl,則會(huì)彈出如圖2所示對(duì)話框,這就是由于沒有對(duì)輸入?yún)?shù)進(jìn)行過(guò)濾而導(dǎo)致的XSS漏洞。

圖1 反射型X S S案例代碼
在反射型XSS中,由于惡意代碼暴露在URL中,并且要求用戶點(diǎn)擊才可觸發(fā),而稍有安全意識(shí)的用戶不會(huì)隨意進(jìn)行點(diǎn)擊,所以反射型XSS的成功率會(huì)低一些,但攻擊者也可以通過(guò)編碼轉(zhuǎn)換增加迷惑性,如前面的url我們可以通過(guò)編碼轉(zhuǎn)換為如下形式:http://localhost/test.php?key=%3Cscript%3Ealert%28%27xss%27%29%3C%2Fscript%3E。
持久型XSS(persistent Cross Site Scripting)也被稱為存儲(chǔ)型XSS,一般出現(xiàn)在留言板、論壇等交互區(qū),攻擊者將惡意代碼嵌入到提交的信息中,這些信息會(huì)被存儲(chǔ)到服務(wù)器的數(shù)據(jù)庫(kù)中,當(dāng)用戶瀏覽網(wǎng)頁(yè)時(shí),Web站點(diǎn)即從數(shù)據(jù)庫(kù)匯總讀取攻擊者存入的非法數(shù)據(jù),然后顯示在頁(yè)面上,這樣在用戶的瀏覽器中就會(huì)執(zhí)行惡意代碼。惡意代碼存儲(chǔ)到服務(wù)器后,所有瀏覽對(duì)應(yīng)頁(yè)面的用戶都會(huì)遭受攻擊,所以其危害性比反射型XSS更大。

圖2 漏洞觸發(fā)效果

圖3 基于DOM的XSS案例代碼

圖4 頁(yè)面分析
基于DOM的XSS是利用客戶端腳本的漏洞來(lái)進(jìn)行攻擊,與前兩類XSS攻擊不同,這種類型的攻擊不依賴于發(fā)送到服務(wù)端的惡意數(shù)據(jù),而反射型、存儲(chǔ)型都需要服務(wù)端的反饋來(lái)構(gòu)造XSS。
圖3給出了一個(gè)存在基于DOM的XSS漏洞的代碼片段,該腳本從URL中提取“name=”后面的內(nèi)容并顯示在頁(yè)面上,假定頁(yè)面文件名為test.html,我們可以這樣構(gòu)造name參數(shù):test.html?name=#">,這樣在訪問(wèn)時(shí)就可以觸發(fā)XSS。
XSS檢測(cè)有靜態(tài)分析和動(dòng)態(tài)分析兩類方法,靜態(tài)分析需要獲取程序的源代碼,而通常我們無(wú)法獲取到源代碼,所以動(dòng)態(tài)分析方法更為常用。動(dòng)態(tài)分析的軟件很多,在免費(fèi)軟件中ccXSScan是一個(gè)不錯(cuò)的反射型XSS檢測(cè)工具。ccXSScan是Fiddler的插件,專門用于掃描和分析反射型XSS的。
用爬蟲或手動(dòng)訪問(wèn)一些網(wǎng)頁(yè)后,點(diǎn)擊step1下的分析按鈕,可進(jìn)行分析,查看頁(yè)面中哪些內(nèi)容可能被用戶控制,如圖4所示。
點(diǎn)擊重放請(qǐng)求按鈕對(duì)檢查出來(lái)的結(jié)果進(jìn)行重放嘗試,最后點(diǎn)擊step2選項(xiàng)卡,點(diǎn)擊分析按鈕,對(duì)重放的結(jié)果進(jìn)行分析,如圖5所示。
點(diǎn)擊具體條目可以看到相應(yīng)的漏洞信息,這里為保護(hù)網(wǎng)站對(duì)網(wǎng)址進(jìn)行了處理。
XSS是最常見的計(jì)算機(jī)安全漏洞之一,即使如Google、Facebook等這樣的知名網(wǎng)站,也曾遭受過(guò)XSS漏洞攻擊,雖然XSS屬于被動(dòng)式攻擊且不易利用,但其危害不容小視,利用它可以劫持瀏覽器用戶會(huì)話、竊取客戶端Cookie、進(jìn)行網(wǎng)絡(luò)釣魚等。在淘寶、支付寶的釣魚欺詐案件中,有很多是利用了XSS漏洞。而通過(guò)使用ccXSScan軟件,我們可以非常方便地檢測(cè)反射型XSS漏洞,該軟件簡(jiǎn)單易用,并且不需要用戶有非常專業(yè)的安全知識(shí),因此可以幫助我們對(duì)反射型XSS攻擊進(jìn)行防范。
(作者單位:浙江省電子信息產(chǎn)品檢驗(yàn)所)

圖5 重放請(qǐng)求分析結(jié)果