1、什麼是XSS?怎麼發生的?web
XSS(Cross site scripting)全稱爲跨站腳本攻擊,是web程序中最多見的漏洞。指攻擊者在網頁中嵌入客戶端腳本(例如Javascript),當用戶瀏覽此網頁時,腳本就會在用戶的瀏覽器上執行,從而達到攻擊者的目的。好比獲取用戶的cookie,導航到惡意網站,攜帶木馬病毒等。瀏覽器
2、XXS漏洞的分類安全
XXS漏洞按照攻擊利用手法的不一樣,有如下三種類型:服務器
類型A,本地利用漏洞:這種漏洞存在於頁面中客戶端腳本自身。其攻擊過程以下所示:cookie
Alice給Bob發送了一個惡意構造了web的URL。工具
Bob點擊並查看了這個URL。測試
惡意頁面中的Javascript打開了一個具備漏洞的HTML頁面並將其安裝在Bob電腦上。網站
具備漏洞的HTML頁面包含了在Bob電腦本地域執行的Javascript。編碼
Alice的惡意腳本能夠在Bob的電腦上執行Bob所持有的權限下的命令。spa
類型B,反射式漏洞:這種漏洞和類型A有些相似,不一樣的是web客戶端使用server端腳本生成頁面爲用戶提供數據時,若是未經驗證的用戶數據被包含在頁面中而未經HTML實體編碼,客戶端代碼便可以注入到動態頁面中。其攻擊過程以下:;
Alice常常瀏覽某個網站,此網站爲Bob所擁有。Bob的站點運行Alice使用用戶名/密碼進行登陸,並存儲敏感信息(好比銀行帳戶信息)。
charly發現Bob的站點包含反射性地XSS漏洞。
charly編寫一個利用漏洞的URL,並將其冒充爲來自Bob的郵件發送給Alice。
Alice在登錄到Bob的站點後,瀏覽charly提供的URL。
嵌入到URL中的惡意腳本在Alice的瀏覽器中執行,就像它直接來自Bob的服務器同樣。
此腳本盜竊敏感信息(受權、信用卡、帳號信息等),而後在Alice徹底不知情的狀況下將這些信息發送到charly的web站點。
類型C,存儲式漏洞:該類型是應用最爲普遍並且有可能影響到web服務器自身安全的漏洞。駭客將攻擊腳本上傳到web服務器上,使得全部訪問該頁面的用戶都面臨信息泄露的可能,其中包括了web服務器的管理員。其攻擊過程以下:
Bob擁有一個web站點,該站點容許用戶發佈信息/瀏覽已發佈的信息。
charly注意到Bob的站點具備類型C的XSS漏洞。
charly發佈一個熱點信息,吸引其餘用戶紛紛閱讀。
Bob或是任何的其餘人如Alice瀏覽了該信息,其會話cookie或其餘信息將被charly盜走。
類型A直接威脅用戶個體,而類型B和類型C所威脅的對象都是企業級web應用。
3、XSS的防護措施
原則:不相信客戶輸入的數據
注意:攻擊代碼不必定在<script></script>中
1.將重要的cookie標記爲http only,這樣的話JavaScript中的document.cookie語句就不能獲取到cookie了
2.只容許用戶輸入咱們指望的數據。例如:年齡的textbox中,只容許用戶輸入數字,而數字以外的字符都過濾掉。
3.對數據進行HTML encode 處理
4.過濾或移除特殊的HTML標籤,例如:<script>,<iframe>,<;for<,>for>," for
5.過濾JavaScript事件的標籤,例如"onclick=","onfocus"等。
4、測試XSS漏洞
方法一:查看代碼,查找關鍵的變量,客戶端將數據傳送給web服務器。通常經過三種方式Querystring,From表單,以及cookie。例如在ASP的程序中,經過request對象獲取客戶端的變量。
假如變量沒有通過HTMLEncode處理,那麼這個變量就存在一個XSS漏洞。
方法二:準備測試腳本
在網頁中的textbox或其餘能輸入數據的地方,輸入這些測試腳本,看能不能彈出對話框,能彈出的話,說明存在XSS漏洞。
在URL中查看有哪些變量經過URL把值傳給了web服務器,把這些變量的值退換成咱們測試的腳本。而後看咱們的腳本是否執行。
方式三:自動化測試XSS漏洞
如今已經有不少XSS掃描工具了。實現XSS自動化測試很是簡單,只須要用HttpWebRequest類。把包含XSS測試腳本,發送給web服務器,而後查看HttpWebResponse中,咱們的XSS測試腳本是否已經注入進去了。