Document:parseHTMLUnsafe() 靜態方法

基準線 2025
新推出

自 ⁨2025 年 9 月⁩起,此功能適用於最新裝置和瀏覽器版本。此功能可能不適用於較舊的裝置或瀏覽器。

警告:此方法將其輸入解析為 HTML,並將結果寫入 DOM。此類 API 被稱為 注入槽,如果輸入最初來自攻擊者,則可能成為 跨站點指令碼 (XSS) 攻擊的載體。

您可以透過始終傳遞 TrustedHTML 物件而不是字串並 強制執行可信型別 來緩解此風險。有關更多資訊,請參閱 安全注意事項

注意: 在支援 Document.parseHTML() 的瀏覽器上,幾乎總是應該使用它而不是此方法,因為它始終會移除不安全的 XSS HTML 實體。

Document 物件的 parseHTMLUnsafe() 靜態方法用於解析 HTML 輸入,可選地過濾不需要的 HTML 元素和屬性,以建立一個新的 Document 例項。

語法

js
Document.parseHTMLUnsafe(input)
Document.parseHTMLUnsafe(input, options)

引數

input

一個 TrustedHTML 或定義要解析的 HTML 的字串例項。

options 可選

一個包含以下可選引數的 options 物件

sanitizer 可選

一個 SanitizerSanitizerConfig 物件,它定義了輸入中允許或刪除的元素。這也可以是一個值為 "default" 的字串,它會應用一個帶有預設(XSS 安全)配置的 Sanitizer。如果未指定,則不使用 Sanitizer。

請注意,如果配置要重複使用,通常預期 Sanitizer 會比 SanitizerConfig 更高效。

返回值

一個 Document

異常

TypeError

如果出現以下情況,將丟擲此錯誤

描述

parseHTMLUnsafe() 靜態方法可用於建立新的 Document 例項,可選地過濾掉不需要的元素和屬性。生成的 Document 將具有“text/html”的內容型別、“UTF-8”的字元集和“about:blank”的 URL。

輸入 HTML 可能包含宣告式 Shadow Root。如果 HTML 字串在特定 Shadow Host 中定義了多個宣告式 Shadow Root,則只建立第一個 ShadowRoot — 後續宣告將解析為該 Shadow Root 中的 <template> 元素。

parseHTMLUnsafe() 預設不執行任何清理。如果沒有將 Sanitizer 作為引數傳遞,輸入中的所有 HTML 實體都將被注入。

安全注意事項

方法名稱中的“Unsafe”字尾表示它不強制刪除所有不安全的 XSS HTML 實體(與 Document.parseHTML() 不同)。雖然如果與適當的 Sanitizer 一起使用,它也可以這樣做,但它不一定使用有效的 Sanitizer,甚至不使用任何 Sanitizer!因此,該方法是跨站指令碼 (XSS) 攻擊的可能載體,其中使用者提供的潛在不安全字串在未經清理的情況下被注入到 DOM 中。

您應該透過始終傳遞 TrustedHTML 物件而不是字串,並使用 require-trusted-types-for CSP 指令強制執行受信任型別來減輕這種風險。這確保輸入透過轉換函式,該函式有機會清理輸入以刪除潛在危險的標記(例如 <script> 元素和事件處理程式屬性),然後再注入。

使用 TrustedHTML 可以僅在少數地方審計和檢查清理程式碼是否有效,而不是分散在所有注入點中。使用 TrustedHTML 時,您不需要將 Sanitizer 傳遞給該方法。

如果由於任何原因您無法使用 TrustedHTML(或者更好的是 setHTML()),那麼下一個最安全的選擇是使用帶有 XSS 安全預設 SanitizersetHTMLUnsafe()

規範

規範
HTML
# dom-parsehtmlunsafe

瀏覽器相容性

另見