告別 innerHTML,迎接 setHTML:Firefox 148 帶來更強的 XSS 防護

本篇文章更新時間:2026/02/25
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持


告別 innerHTML,迎接 setHTML:Firefox 148 的更安全預設

更安全的 HTML 插入方式,終於成為瀏覽器標準。

編輯前言:這篇文章來自 Mozilla Hacks,談的是 Firefox 148 搶先推出的 Sanitizer API。對任何寫前端的人來說,這代表著網頁輸入與渲染邏輯即將迎來重大改變——也是一次更容易、更務實的 XSS 防護里程碑。

核心觀點 (Key Takeaways)

  • Sanitizer API 讓開發者能「預設安全」地過濾不可信 HTML,避免 XSS。
  • 新方法 setHTML() 能直接取代 innerHTML,並自動做內容清洗。
  • Firefox 148 率先支援 Sanitizer API 與 Trusted Types,其他瀏覽器預期會跟上。

深入解析

這篇原文一開始就點出老問題:XSS(跨網站指令碼攻擊)多年來都是網路上最普遍、也最棘手的安全漏洞之一。只要網站把使用者輸入直接塞回 HTML,就可能允許攻擊者注入任意 JavaScript,造成資料竊取、行為操控等風險。

Mozilla 過去已經嘗試透過 Content-Security-Policy(CSP)改善,但 CSP 的導入成本太高,需要架構重整與長期維護,因此始終無法普及到整個網路生態。

這次他們選擇另闢途徑:讓瀏覽器直接內建安全的 HTML 清洗標準。

原文強調:「Sanitizer API is designed to help fill that gap by providing a standardized way to turn malicious HTML into harmless HTML — in other words, to sanitize it.」

也就是說,瀏覽器本身就可以清理危險內容,而不是靠每個開發者自己寫一套 bug 連發的 HTML sanitizer。

1. setHTML(): 更安全的 innerHTML 替代品

文章示範了一段危險的 HTML:

document.body.setHTML(`<h1>Hello my name is <img src="x" onclick="alert('XSS')">`);

Sanitizer API 會自動移除 <img> 元素與 onclick 屬性,最後得到:

<h1>Hello my name is</h1>

換句話說,只要把所有 innerHTML = ... 改成 setHTML(...),你就能獲得強化版的安全預設。

2. 自訂 Sanitizer 規則:可嚴可鬆

如果預設的清洗規則太嚴格,也可以傳入自訂設定,決定哪些標籤、哪些屬性應該保留或刪除。文章還推薦使用 Sanitizer API playground 做實驗。

3. 與 Trusted Types 聯手,打造更完整的防護

文章也提到 Trusted Types。當專案開始採用 setHTML() 後,就能更容易開啟 Trusted Types,限制所有 HTML 注入的來源與方式,避免開發者或第三方程式碼偷偷用回危險的 API。

筆者心得與啟發

讀完這篇,我最大的感觸是:網頁安全終於開始朝「合理的預設值」前進,而不是依賴個別開發者的細心與警覺。innerHTML 雖然方便,卻讓許多網站默默暴露在攻擊風險下;Sanitizer API 提供了一個既低成本又一致的替代方案。

對現代前端開發者來說,我會建議:

  • 開始掃描專案中所有 innerHTML 使用情況,逐步改用 setHTML。
  • 若網站有任何使用者輸入的渲染情境,更應優先導入 Sanitizer API。
  • 搭配 Trusted Types,可以更有效避免團隊意外引入新漏洞。

最重要的是,這一次的變革不只屬於 Firefox。當標準出現後,其他瀏覽器終究會跟上,這象徵著整個 Web 的安全基礎正在提升。

對習慣追蹤 Web API 進展的我來說,這是一個值得記錄的重要版本更新,也會是未來許多安全最佳實踐指南中的新基石。


Share:

作者: Chun

WordPress 社群貢獻者、開源社群推廣者。專注於 WordPress 外掛開發、網站效能最佳化、伺服器管理,以及 iDempiere 開源 ERP 導入與客製開發。曾參與 WordCamp Taipei 等社群活動,GitHub Arctic Code Vault Contributor。提供資訊顧問、WordPress 開發教學、主機最佳化與企業 ERP 整合服務。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon