iT邦幫忙

2026 iThome 鐵人賽

DAY 16
0
Security

嘗試使用OWASP ZAP與DVWA探索常見 Web 漏洞系列 第 16 篇

DVWA 實作:DOM-based XSS(DOM 型跨站腳本)與前端安全防禦

  • 分享至 

  • xImage
  •  

在前面我們陸續學習了Reflected與Stored XSS。今天我們補齊 XSS 的最後一種經典型態:DOM-based XSS(DOM 型跨站腳本攻擊)。

  • 什麼是 DOM-based XSS?

DOM(Document Object Model,文件物件模型) 是瀏覽器用來解析與操作網頁結構的介面。

傳統的XSS攻擊通常需要後端伺服器將使用者輸入拼接到HTML頁面中傳回瀏覽器;但DOM-based XSS則完全發生在前端:

1.JavaScript從資料源(Source)讀取使用者可控的輸入(如 window.location.href、URLSearchParams)。

2.JavaScript未經適當過濾或轉義,將資料傳遞給危險執行點(Sink)(如 innerHTML、document.write()、element.outerHTML)。

3.瀏覽器直接將該字串當成 HTML/JavaScript 執行,觸發攻擊。

  • DVWA 實作步驟(Low 安全等級)
  1. 觀察頁面邏輯

選擇語言並送出後,檢視網頁HTML原始碼,會看到前端有一段JavaScript程式碼:
if (document.location.href.indexOf("default=") >= 0) {
var lang = document.location.href.substring(document.location.href.indexOf("default=")+8);
document.write("" + decodeURIComponent(lang) + "");
}

  1. 注入攻擊Payload

直接將URL中的default參數替換為 JavaScript 惡意腳本:
http://localhost:8080/vulnerabilities/xss_d/?default=alert(document.cookie)

結果:瀏覽器解析URL後,document.write() 直接把 alert(document.cookie) 插入到 標籤內並執行,成功跳出 Cookie 彈窗!
https://ithelp.ithome.com.tw/upload/images/20260930/20179312wJqkiBXkdg.png

  • 如何正確防禦DOM-based XSS?

1.避免使用危險的DOM Sink函式:盡量不要使用document.write()、innerHTML 或 eval()。

2.使用前端防護庫進行Sanitization:
若必須渲染HTML字串,應先經過成熟的前端安全清理庫(如 DOMPurify)進行轉義與淨化

佈署內容安全策略(CSP):
透過HTTP Header設定Content-Security-Policy,封鎖未授權的內聯腳本(Inline Script)執行。


上一篇
Web 資安觀念篇:圖形驗證碼(CAPTCHA)的演進與常見設計漏洞
下一篇
DVWA 實作:JavaScript 前端邏輯漏洞與 Client-side 安全盲點
系列文
嘗試使用OWASP ZAP與DVWA探索常見 Web 漏洞 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言