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

浏览器兼容性