文章目錄
- 1. 概念
- 2. Reflected XSS
- 3. Stored XSS
- 4. DOM-XSS
- 5. XSS危害和預防
1. 概念
XSS:全稱是跨域腳本攻擊(Cross Site Scripting),為了不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故将跨站腳本攻擊縮寫為XSS。
注意與CSRF攻擊的差別,參見《CSRF攻擊》
XSS攻擊分為三種,分别是:
- Reflected XSS(基于反射的XSS攻擊)
- Stored XSS(基于存儲的XSS攻擊)
- DOM-based or local XSS(基于DOM或本地的XSS攻擊)
特點就是可以将
惡意HTML/JavaScript代碼注入到受害使用者浏覽的網頁上
,進而達到劫持使用者會話的目的。XSS根據惡意腳本的傳遞方式可以分為3種,分别為反射型、存儲型、DOM型,前面兩種惡意腳本都會經過伺服器端然後傳回給用戶端,相對DOM型來說比較好檢測與防禦,而DOM型不用将惡意腳本傳輸到伺服器在傳回用戶端,這就是DOM型和反射、存儲型的差別。
2. Reflected XSS
反射型xss指的是用戶端的不安全輸入而引起的攻擊,例如:
在某網站搜尋,搜尋結果會顯示搜尋的關鍵詞,搜尋時關鍵詞填入,然後點選搜尋。如果頁面沒有對關鍵詞進行過濾及代碼轉換,這段代碼就會直接在頁面上執行,彈出 1。
第二種就是資料可以送出到服務端,雖然沒有入庫,又直接傳回頁面,也會執行該腳本!
特點是攻擊腳本未入庫!
開發安全措施:
- 前端在顯示服務端資料時候,不僅是标簽内容需要過濾、轉義,就連屬性值也都可能需要。
- 後端接收請求時,驗證請求是否為攻擊請求,攻擊則屏蔽。
例如存在如下标簽:
轉義為:
3. Stored XSS
基于存儲的XSS攻擊,是通過發表帶有惡意跨域腳本的文章/文章,進而把惡意腳本存儲在伺服器,下次每個通路該文章/文章的人就會觸發執行。
原理和Reflected XSS一樣,隻不過存在資料庫裡面了
例如,資料的name字段存儲就是腳本:
開發安全措施:
- 首要是服務端要進行過濾,因為前端的校驗可以被繞過。
- 當服務端不校驗時候,前端要以各種方式過濾裡面可能的惡意腳本,例如script标簽,将特殊字元轉換成HTML編碼。
4. DOM-XSS
DOM-XSS漏洞是基于文檔對象模型(Document Objeet Model,DOM)的一種漏洞,DOM-XSS是通過url傳入參數去控制觸發的,其實也屬于反射型XSS。 、
詳情參見:《DOM-XSS攻擊原理與防禦》
5. XSS危害和預防
應對措施:
(1)對于輸出到html的輸入内容,采用過濾關鍵詞的方式,把預設的關鍵詞轉換成字元實體,例如将< >轉換成< 和 > 。
(2)Content-Security-Policy(内容安全政策) 簡稱 csp
即隻允許頁面向我們允許的域名發起跨域請求,而不符合政策的惡意攻擊則被阻擋。csp需要在Response Headers中添加
采用CSP(Content-Security-Policy) 一定程度上,可以大大減少xss,詳情參見《内容安全政策CSP(Content-Security-Policy)》
參考:
《XSS(跨站腳本)漏洞詳解之XSS跨站腳本攻擊漏洞的解決》