天天看點

【web】XSS跨域腳本攻擊1. 概念2. Reflected XSS3. Stored XSS4. DOM-XSS5. XSS危害和預防

文章目錄

  • 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。

第二種就是資料可以送出到服務端,雖然沒有入庫,又直接傳回頁面,也會執行該腳本!

特點是攻擊腳本未入庫!

開發安全措施:

  1. 前端在顯示服務端資料時候,不僅是标簽内容需要過濾、轉義,就連屬性值也都可能需要。
  2. 後端接收請求時,驗證請求是否為攻擊請求,攻擊則屏蔽。

例如存在如下标簽:

轉義為:

3. Stored XSS

基于存儲的XSS攻擊,是通過發表帶有惡意跨域腳本的文章/文章,進而把惡意腳本存儲在伺服器,下次每個通路該文章/文章的人就會觸發執行。

原理和Reflected XSS一樣,隻不過存在資料庫裡面了

例如,資料的name字段存儲就是腳本:

【web】XSS跨域腳本攻擊1. 概念2. Reflected XSS3. Stored XSS4. DOM-XSS5. XSS危害和預防

開發安全措施:

  1. 首要是服務端要進行過濾,因為前端的校驗可以被繞過。
  2. 當服務端不校驗時候,前端要以各種方式過濾裡面可能的惡意腳本,例如script标簽,将特殊字元轉換成HTML編碼。

4. DOM-XSS

DOM-XSS漏洞是基于文檔對象模型(Document Objeet Model,DOM)的一種漏洞,DOM-XSS是通過url傳入參數去控制觸發的,其實也屬于反射型XSS。 、

詳情參見:《DOM-XSS攻擊原理與防禦》

5. XSS危害和預防

【web】XSS跨域腳本攻擊1. 概念2. Reflected XSS3. Stored XSS4. DOM-XSS5. XSS危害和預防

應對措施:

(1)對于輸出到html的輸入内容,采用過濾關鍵詞的方式,把預設的關鍵詞轉換成字元實體,例如将< >轉換成< 和 > 。

(2)Content-Security-Policy(内容安全政策) 簡稱 csp

  即隻允許頁面向我們允許的域名發起跨域請求,而不符合政策的惡意攻擊則被阻擋。csp需要在Response Headers中添加

采用CSP(Content-Security-Policy) 一定程度上,可以大大減少xss,詳情參見《内容安全政策CSP(Content-Security-Policy)》

參考:

《XSS(跨站腳本)漏洞詳解之XSS跨站腳本攻擊漏洞的解決》