You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DOMPurify中允许iframe标签并保留其全部属性

解决DOMPurify保留iframe所有属性的问题

嘿,我来帮你搞定这个问题!你已经通过ADD_TAGS把iframe加入了允许标签列表,但DOMPurify默认只会保留一组安全的默认属性,那些不在默认列表里的属性(比如allow、allowfullscreen、frameborder这些)就会被过滤掉。要保留这些属性,你需要在配置里明确告诉DOMPurify允许它们。

下面给你两种解决方案,推荐第一种更安全的精准配置方式:

方案一:精准指定需要保留的iframe属性(推荐)

这种方式只添加你需要的属性,避免引入不必要的安全风险。在配置中新增ADD_ATTR数组,把iframe的额外属性都列进去:

var config = {
  ADD_TAGS: ['iframe'],
  // 添加需要保留的iframe专属属性
  ADD_ATTR: ['allow', 'allowfullscreen', 'frameborder', 'scrolling'],
  KEEP_CONTENT: false
}

方案二:允许iframe的所有属性(不推荐,谨慎使用)

如果你确定要保留iframe的所有属性(包括可能存在安全风险的属性),可以用ALLOW_ATTR设置为['*'],但一定要确保你的输入内容是完全可信的:

var config = {
  ADD_TAGS: ['iframe'],
  // 允许所有属性(风险较高)
  ALLOW_ATTR: ['*'],
  KEEP_CONTENT: false
}

修改后的完整代码示例

这里用方案一的精准配置来演示:

<!doctype html>
<html>
<head>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/dompurify/1.0.3/purify.min.js"></script>
</head>
<body>
  <!-- Our DIV to receive content -->
  <div id="sanitized"></div>

  <!-- Now let's sanitize that content -->
  <script>
    /* jshint globalstrict:true, multistr:true */
    /* global DOMPurify */
    'use strict';

    // Specify dirty HTML
    var dirty = '<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" scrolling="no" src="https://www.youtube.com/embed/vJG698U2Mvo" width="560"></iframe>';

    // 精准配置允许的标签和属性
    var config = {
      ADD_TAGS: ['iframe'],
      ADD_ATTR: ['allow', 'allowfullscreen', 'frameborder', 'scrolling'],
      KEEP_CONTENT: false
    }

    // Clean HTML string and write into our DIV
    var clean = DOMPurify.sanitize(dirty, config);
    console.log('clean: ', clean)
    document.getElementById('sanitized').innerHTML = clean;
  </script>
</body>
</html>

运行这段代码后,净化后的输出就会完整保留所有需要的属性:

clean:

内容的提问来源于stack exchange,提问作者Henok Tesfaye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 17:48:10