(本文演示 github:https://github.com/zphhhhh/node-secure)
什么是 XSS 攻擊?
XSS 全稱 Cross-Site Scripting,可譯為:跨站腳本攻擊,由于 CSS 已被占用,因此簡稱 XSS。
一句話理解 XSS:不可信內(nèi)容經(jīng)處理后被當(dāng)做可信內(nèi)容再渲染。
XSS 攻擊的種類
XSS 攻擊可細(xì)分為 反射型 XSS、持久型 XSS、DOM XSS,前兩種針對服務(wù)器,后一種針對客戶端。

XSS 攻擊的種類.png
反射型 XSS
不可信內(nèi)容提交到服務(wù)器,立即在響應(yīng)中被返回。
比如:有一個登陸頁面需要輸入用戶名,提交后會顯示 “你好,XXX”,這里的 XXX 即有可能存在反射型 XSS 攻擊漏洞。

反射型 XSS.png
持久型 XSS
不可信內(nèi)容提交到服務(wù)器,被保存到服務(wù)器數(shù)據(jù)庫,下次需要時被當(dāng)做可信內(nèi)容被返回。
比如:惡意代碼寫入個人資料頁,所有訪問我的資料的朋友都會遭到攻擊

持久型 XSS.png
DOM XSS
不可信內(nèi)容被插入到頁面DOM節(jié)點。
比如:網(wǎng)絡(luò)劫持(使用數(shù)據(jù)流量訪問網(wǎng)頁時出現(xiàn)的網(wǎng)絡(luò)服務(wù)商鏈接)

DOM XSS.png

百度首頁被運營商植入 DOM XSS.png
XSS 攻擊的常見攻擊效果
- 獲取用戶的 cookie,實現(xiàn)會話劫持
- 盜取網(wǎng)銀資產(chǎn)
- 在頁面?zhèn)卧毂韱危@取用戶的賬號密碼
- XSS Worm(終極手段)
- 等等
防御 XSS
為防御 XSS,我們首先要知道 XSS 攻擊的本質(zhì)是不安全的
HTML 注入,可通過在 HTML、CSS、JS 或 HTTP 協(xié)議層次上進(jìn)行防范。下面提供一些常用的防御策略:
- 輸入檢查
- 用戶名、郵箱等表單驗證(前臺/服務(wù)器二次驗證)
- 富文本使用白名單機制等
- 輸出檢查
- HTML-Encoder
- js-Encoder
- HTTP 頭部:HttpOnly(四兩撥千千)
- 設(shè)置 cookie 時加入 HttpOnly 可使 js 腳本無法獲取 cookie
- HTTP 頭部:CSP(Content Security Policy)
- 定義允許的資源加載地址,比如圖片 / 視頻 / JS 腳本等
- HTTPS加密訪問
- 有效防止 DOM XSS 攻擊
參考:
《白帽子講 Web 安全》