簡(jiǎn)介
跨站腳本攻擊(Cross Site Scripting)縮寫(xiě)CSS,但這會(huì)與層疊樣式表(Cascading Style Sheets,CSS)的縮寫(xiě)混淆,故取名Xss,Xss攻擊是網(wǎng)絡(luò)安全攻擊中非常常見(jiàn)的一種攻擊方式。它是對(duì)網(wǎng)頁(yè)注入可執(zhí)行腳本的一種攻擊方式。
1、反射型XSS
假設(shè)我們的網(wǎng)站中有這樣一行代碼:
...
<span>輸入:<?php echo $_GET['input'];?></span>
...
這是一個(gè)簡(jiǎn)單的頁(yè)面,$_GET獲取了變量名為input的值,通過(guò)echo函數(shù)輸出了值。
這個(gè)時(shí)候我們?cè)L問(wèn):domain.com/index.php?input=helloworld

頁(yè)面會(huì)出現(xiàn)“輸入:helloworld”,一切看起來(lái)都很正常。
但是我們輸入一些javascript呢?
例如在瀏覽器里訪問(wèn):
domain.com/index.php?input=<script>alert('xss')</script>
沒(méi)錯(cuò)它彈窗了。
但這并沒(méi)有實(shí)際意義,但是通過(guò)這個(gè)原理知道了,輸入javascript代碼是可以被執(zhí)行的。當(dāng)我們輸入一些其他復(fù)雜代碼,比如
document.cookie就會(huì)盜取用戶cookie信息,或讀取其他重要信息。
攻擊例子
還是剛剛這個(gè)網(wǎng)頁(yè),我們假設(shè)某個(gè)用戶的這個(gè)網(wǎng)頁(yè)中的localstorage中保存著用戶token。再假設(shè)這時(shí)候訪問(wèn):domain.com/index.php?input=<script>location.)</script>。
這正是將 授權(quán)登陸的token發(fā)送給了攻擊者的服務(wù)器,攻擊者拿到token就等于拿到了登陸態(tài),攻擊者正是通過(guò)發(fā)送此類似鏈接,誘導(dǎo)用戶點(diǎn)擊進(jìn)行攻擊。因此不要點(diǎn)擊陌生鏈接。
如何預(yù)防
1、不要相信用戶輸入,過(guò)濾所有的HTTP Request參數(shù)。
2、用戶輸入長(zhǎng)度限制。
3、http-only,禁止js讀取某些cookie。
4、避免拼接html。
5、避免內(nèi)聯(lián)事件。如<button onclick="load('{{ data }}')">點(diǎn)</button>
6、主動(dòng)檢測(cè)和發(fā)現(xiàn)