認識 XSS 的種類:
反射型(Reflected XSS):惡意輸入立即出現在回應中。
儲存型(Stored XSS):惡意內容被儲存在資料庫中,每次有人瀏覽都會觸發。
DOM 型(DOM-based XSS):在前端 JavaScript 中被執行。
實驗環境
如果你已經安裝 DVWA 或 Juice Shop,建議在 DVWA(安全等級 Low)下操作。
找一個 輸入框或查詢功能(例如搜尋、留言)。
嘗試觸發簡單 XSS
在輸入框中輸入:
<script>alert('XSS')</script>
送出後,若跳出 alert 視窗,表示成功觸發。
思考:
如果能輸入 是否也能觸發?
server 沒有過濾 ,意味著 輸入檢查與輸出編碼不足。
面幫你把這次的 XSS 測試整理成 5 行解題紀錄(可直接當交付物)、再補上簡短說明、修復建議與進階測試小 tip。請只在你的本地 lab 執行。
5 行解題紀錄(可貼到報告)
在目標頁面的輸入欄輸入 payload:alert('XSS')。
送出表單/搜尋後觀察頁面回應,頁面立即彈出 alert('XSS'),確認反射型 XSS 成功。
使用瀏覽器 DevTools 檢查受影響的 DOM 範位,找到未經 HTML encode 的輸入插入點(innerHTML)。
用稍改 payload(例如 )驗證其他載入點是否也會觸發。
報告建議:將回報位置截圖、紀錄 URL 與請求(含完整 request/response),並提出以輸出編碼(HTML encode)或內容安全政策(CSP)修復。
簡短說明(1–2 句)
你輸入的 payload 在回應中被直接渲染並執行,代表該欄位缺乏輸出編碼或輸入過濾,存在反射型 XSS 風險。
修復建議(重要)
在輸出時做 HTML encode/escape(例如 < >),不要直接將未消毒內容放入 DOM。
對於可接受 HTML 的場景,使用白名單 HTML sanitizer(如 DOMPurify)而非黑名單。
在伺服器端與前端同時檢查輸入,並啟用 Content Security Policy(CSP)以降低 JavaScript 執行風險。
確保 cookie 設置 HttpOnly、Secure、SameSite(防止被 JS 讀取與 CSRF 風險)。
進階測試小 tip
嘗試在不同參數位置(URL query、Referer header、User-Agent)注入看是否有其他回顯點。
用 Burp 攔截並記錄 request/response,將攔截內容附至報告。
將 payload 編碼(URL encode / HTML encode)測試伺服器如何處理不同編碼。
如要我把你做的截圖、request/response 或 DevTools 的輸出整理成一頁交付報告,或把這些步驟改寫成更正式的 iThome 鐵人賽稿件段落,我可以立刻幫你生成。
今天完成 Day 5:在本地實作反射型 XSS 並成功觸發 alert,透過 DevTools 定位到未經輸出編碼的插入點。我學會構造並重放 payload、擷取證據截圖,理解輸出編碼與 Content Security Policy 的防護重要性。接下來打算用 AI 幫我撰寫完整解題報告與修復建議,提升報告品質與可復現性。