DOMPurify 完整介绍

DOMPurify 完整介绍

一、一句话定义

DOMPurify 是业界最主流、安全可靠的 JS HTML 清洗库,专门用来过滤脏 HTML、防御 XSS 跨站脚本攻击,把用户输入的危险代码清理干净,输出可安全插入页面的纯净 HTML,同时支持 SVG、MathML 清洗npm。

二、核心作用(解决什么问题)

网页最常见漏洞:XSS 攻击 当你直接把用户输入 / 后端富文本用 innerHTML、Vue v-html、React dangerouslySetInnerHTML 渲染时,恶意用户会注入:

xml 复制代码
<!-- 攻击代码示例 -->
<img src=x onerror="窃取cookie、劫持账号">
<a href="javascript:盗号脚本">点我</a>
<svg onload="恶意代码"></svg>
<script>木马</script>

DOMPurify 会自动删除 / 清空所有可执行代码,只保留安全标签与属性。

清洗效果示例

scss 复制代码
// 脏内容
const dirty = '<img src=x onerror=alert(1)><script>stealCookie()</script>'
// 清洗后
DOMPurify.sanitize(dirty)
// 输出:<img src="x">

三、工作原理(比正则过滤强在哪)

  1. 不用正则匹配:正则很容易被攻击者绕过;

  2. 调用浏览器原生 DOM API,把 HTML 解析成真实 DOM 树;

  3. 遍历所有节点,对照内置安全白名单:

    • 删除危险标签:<script>、<iframe>、<svg onxxx>
    • 清除事件属性:onclick、onerror、onload
    • 拦截危险协议:javascript:、data:、vbscript:
  4. 把过滤后的干净 DOM 转回 HTML 字符串返回DOMPurify。

四、适用场景(前端必用场景)

  1. 富文本编辑器(评论、发帖、公告、工单)
  2. Vue v-html / React dangerouslySetInnerHTML 渲染内容
  3. 展示后端返回的自定义 HTML、Markdown 转 HTML
  4. 渲染用户上传 SVG、富文本邮件内容
  5. 读取 URL 参数、localStorage 内容插入页面(防 DOM-XSS)

五、关键特性

  1. 跨环境:浏览器全兼容、Node.js(搭配 jsdom)、SSR、Electron;
  2. 可自定义白名单:允许 / 禁用指定标签、属性、图片协议;
  3. 体积小:压缩后约 15KB,性能极高;
  4. 持续更新安全规则,能防御各种变形绕过 XSS;
  5. 支持钩子函数,自定义清洗逻辑。

六、极简使用示例

1. 安装

bash 复制代码
npm install dompurify
# 配套类型提示(TS项目)
npm install @types/dompurify -D

2. 基础调用

javascript 复制代码
import DOMPurify from 'dompurify'

// 清洗用户输入
const unsafeHtml = '<p>内容<img src=x onerror=alert(1)></p>'
const safeHtml = DOMPurify.sanitize(unsafeHtml)

// 安全渲染到页面
document.body.innerHTML = safeHtml

3. Vue v-html 标准写法

xml 复制代码
<template>
  <div v-html="safeContent"></div>
</template>
<script setup>
import DOMPurify from 'dompurify'
const rawHtml = ref(后端返回的富文本)
const safeContent = computed(() => DOMPurify.sanitize(rawHtml.value))
</script>

4. 自定义配置(允许 iframe、自定义属性)

php 复制代码
// 允许iframe、允许data图片
const clean = DOMPurify.sanitize(html, {
  ADD_TAGS: ['iframe'],
  ADD_ATTR: ['allow'],
  ALLOWED_DATA_URI_IMAGES: true
})

七、常见误区

  1. 只后端过滤,前端不用 DOMPurify前端 DOM-XSS(URL 参数、本地存储)后端拦截不到,必须前端再清洗一层;
  2. 自己写正则过滤 script/onerror攻击者有上百种绕过写法,正则防不住;
  3. 清洗一次永久安全 每次渲染动态 HTML 都要重新走 sanitize;
  4. 以为框架自带防护:Vue/React 只转义文本,v-html /dangerouslySetInnerHTML 完全不防 XSS,必须搭配 DOMPurify。

八、功能

但凡页面需要动态渲染不受信任的 HTML,DOMPurify 是行业标准安全方案,是防御存储型、DOM 型 XSS 最通用、最低成本的手段。

DOMPurify 是业界最主流、安全可靠的 JS HTML 清洗库,专门用来过滤脏 HTML、防御 XSS 跨站脚本攻击,把用户输入的危险代码清理干净,输出可安全插入页面的纯净 HTML,同时支持 SVG、MathML 清洗npm。

相关推荐
考研保研资料分享3 分钟前
中国人民大学英语笔译保研面经:五校考核、视译口译与择校复盘
面试
Csvn1 小时前
运行时性能
前端
Never_every992 小时前
位图转矢量工具哪个好?实测抠抠图AI位图转矢量工具
大数据·前端
paopaokaka_luck2 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
古希腊掌管代码的神THU2 小时前
为什么DPO中chosen/rejected概率同时下降?
人工智能·深度学习·机器学习·自然语言处理·面试
空中湖3 小时前
用 React 写数据大屏:为什么我不建议用图表库
前端·react.js·前端框架
欣欣之王来了4 小时前
原始HTML插值:v-html指令的使用与安全风险
前端·学习·架构·项目·vue3教程
IT_陈寒4 小时前
Redis的LRU淘汰策略坑了我一整天
前端·人工智能·后端
计算机魔术师4 小时前
砍半价格、参数再涨,国产旗舰追到 Opus 鼻尖了
前端
特立独行的猫A5 小时前
10 MB 的桌面 AI 客户端:用仓颉 + 系统 WebView 替代 Electron
前端·harmonyos