Sanitizer: removeUnsafe() 方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

Sanitizer 介面的 removeUnsafe() 方法會配置 sanitizer 配置,使其移除瀏覽器認為是 XSS 不安全的所有元素、屬性和事件處理程式內容屬性。

不安全的元素和屬性是透過分別呼叫 Sanitizer.removeElement()Sanitizer.removeAttribute() 新增到配置中的。這會將它們新增到 sanitizer 配置的禁止列表中:removeElementsremoveAttributes,並(如果存在)從配置的允許列表中移除它們:elementsreplaceWithChildrenElementsattributes

可以呼叫此方法使任何自定義配置變得 XSS 安全。如果與使用允許列表的配置一起使用,它將從這些列表中移除 XSS 不安全的實體。如果僅與使用禁止(“移除”)列表的配置一起使用,則可以確保配置包含這些列表中的不安全元素。

請注意,如果您將 sanitizer 與“安全”HTML 設定器(如 Element.setHTML()ShadowRoot.setHTML())之一一起使用,則無需呼叫此方法即可使 sanitizer 安全。在這些設定器中使用時,該方法會自動呼叫,而不會修改傳入的 Sanitizer 例項。

語法

js
removeUnsafe()

引數

無。

返回值

無 (undefined)。

示例

基本用法

以下程式碼展示了 removeUnsafe() 的用法。

js
// Create sanitizer.
const sanitizer = new Sanitizer(/* Some configuration */);

// Make the configuration XSS-safe
sanitizer.removeUnsafe();

使 sanitizer 配置安全

此示例演示了呼叫 removeUnsafe() 如何使 sanitizer 配置變得 XSS 安全。

JavaScript

程式碼首先建立一個新的 Sanitizer 物件,該物件允許安全的元素 <p>、不安全的元素 <script><iframe>,以及不安全的 onwebkitanimationend 事件處理程式屬性。

然後,程式碼在 sanitizer 上呼叫 removeUnsafe() 並記錄其配置。

js
// Create sanitizer that allows
const sanitizer = new Sanitizer({
  elements: ["p", "script"],
  attributes: ["onwebkitanimationend"],
  replaceWithChildrenElements: ["iframe"],
});

// Make the sanitizer safe!
sanitizer.removeUnsafe();

// Log the sanitizer configuration
const sanitizerConfig = sanitizer.get();
log(JSON.stringify(sanitizerConfig, null, 2));

結果

下面顯示了最終的配置。請注意,不安全的元素和屬性已從“允許”列表移至相應的“移除”列表。在這種情況下,我們仍然允許 <p> 元素,因此在使用 sanitizer 時,輸入中的 <p> 元素才會被匯入。

規範

規範
HTML Sanitizer API
# dom-sanitizer-removeunsafe

瀏覽器相容性