定義
XSS是跨站腳本攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故将跨站腳本攻擊縮寫為XSS。
惡意攻擊者往Web頁面裡插入惡意Script代碼,當使用者浏覽該頁之時,嵌入其中Web裡面的Script代碼會被執行,進而達到惡意攻擊使用者的目的。
分類
大分類 | 小分類 | 原理 |
---|---|---|
非存儲 | DOM型 | ① 不需要經過伺服器 ② 通路者的浏覽器執行相應的腳本 |
反射型 | ① 通過url将參數傳遞給伺服器 ② 伺服器不處理,直接“反射”回通路者的浏覽器 ③ 通路者的浏覽器執行相應的腳本 | |
存儲型 | 存儲 型 | ① 通過url将參數傳遞給伺服器 ② 伺服器經過存儲後再“反射”回通路者的浏覽器 ③ 通路者的浏覽器執行相應的腳本 |
反射型XSS的示意圖:
存儲型XSS的示意圖:
攻擊
1. 大小寫繞過
這個繞過的前提是,網站僅僅過濾了
利用語句:
2. 并不是隻有script标簽才可以插入代碼
隻要任何能執行js的綁定事件都可以。最常用的是img的onerror,比如
3. 編碼腳本代碼繞過關鍵字過濾
有的伺服器會對關鍵字(如alert)進行過濾,這時我們可以嘗試将關鍵字進行編碼後再插入。
不過直接顯示編碼的話是不能被浏覽器執行的,是以我們需要用一個eval語句來實作。eval()會将編碼過的語句解釋後再執行。
例如
alert(1)
編碼過後是
\u0061\u006c\u0065\u0072\u0074(1)
是以建構出來的攻擊語句如下:
防範
1. 過濾
對諸如
<script>
、
<img>
、
<a>
等标簽進行過濾。
2. 編碼
将特殊字元(如<等)轉換為HTML實體。
3. 限制
一般xss攻擊要能達成往往需要較長的字元串,是以對于一些可預期的輸入,可以通過限制長度強制截斷來進行防禦。