天天看點

【前端安全】淺談XSS攻擊和防範

定義

XSS是跨站腳本攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故将跨站腳本攻擊縮寫為XSS。

惡意攻擊者往Web頁面裡插入惡意Script代碼,當使用者浏覽該頁之時,嵌入其中Web裡面的Script代碼會被執行,進而達到惡意攻擊使用者的目的。

分類

大分類 小分類 原理
非存儲 DOM型 ① 不需要經過伺服器 ② 通路者的浏覽器執行相應的腳本
反射型 ① 通過url将參數傳遞給伺服器 ② 伺服器不處理,直接“反射”回通路者的浏覽器 ③ 通路者的浏覽器執行相應的腳本
存儲型 存儲 型 ① 通過url将參數傳遞給伺服器 ② 伺服器經過存儲後再“反射”回通路者的浏覽器 ③ 通路者的浏覽器執行相應的腳本

反射型XSS的示意圖:

【前端安全】淺談XSS攻擊和防範

存儲型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攻擊要能達成往往需要較長的字元串,是以對于一些可預期的輸入,可以通過限制長度強制截斷來進行防禦。