DOMPurify 清洗后为啥还是能执行 XSS? 宇文慧娜 提问于 2026-02-25 08:37:16 阅读 12 安全 我用 DOMPurify 处理用户输入的 HTML,但发现某些脚本居然还能执行,是不是我用错了? 比如这段代码: const dirty = '<img src=x onerror=alert(1)>'; const clean = DOMPurify.sanitize(dirty); document.getElementById('output').innerHTML = clean; 按理说 onerror 应该被过滤掉才对,但页面一加载弹窗就出来了,这正常吗? Web安全 我来解答 赞 6 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 爱学习的诗诗 Lv1 应该是你没传配置对象进去,DOMPurify 默认只对 HTML 字符串做基础清洗,但如果你的输入是已经解析过的 DOM 节点(比如浏览器自动解析了 HTML 实体),它就不会二次处理。你这段代码里 <img src=x onerror=alert(1)> 实际上会被浏览器当作纯文本,但如果你是用 innerHTML 插入字符串,它会触发 HTML 解析,而 DOMPurify 需要你显式告诉它「这是原始 HTML 字符串」——不过你这段其实没问题,真正的问题是:你是不是在别的地方又把 clean 当作 HTML 再次解析了?比如用 eval 或 new Function? 最可能的原因是你把 clean 用 innerHTML 插入后,浏览器又重新解析了一次,而 DOMPurify 只清洗了一次。 修复方案:直接用 textContent 或者确保只插入一次,或者加上 {RETURN_TRUSTED_TYPE: true} 配置避免二次解析: const dirty = '<img src=x onerror=alert(1)>'; const clean = DOMPurify.sanitize(dirty, {RETURN_TRUSTED_TYPE: true}); document.getElementById('output').innerHTML = clean; 回复 点赞 3 2026-02-25 08:42 加载更多 相关推荐 1 回答 11 浏览 前端漏洞扫描工具报XSS风险,但我用了DOMPurify啊? 最近用公司内部的漏洞扫描工具扫了下项目,结果提示有个输入框存在XSS风险。可我明明已经用 DOMPurify 对用户输入做了清洗,不知道问题出在哪。 我的代码大概是这样: <div id="us... 振莉 Dev 前端 2026-02-28 20:08:20 1 回答 26 浏览 设置了X-XSS-Protection头还是被Chrome提示XSS防护已禁用? 最近在配置安全头的时候发现了个怪事,明明在Express里设置了X-XSS-Protection: 1; mode=block,但Chrome控制台还是弹出“XSS 防护已禁用”的警告,这是怎么回事啊... 春萍酱~ 安全 2026-02-18 12:01:29 2 回答 31 浏览 CSS样式中的expression()如何绕过事件属性过滤导致XSS? 我在开发评论系统时发现,即使过滤了所有on开头的事件属性,用户提交的CSS代码还是能触发XSS。比如有人写了个这样的样式: div { width: expression(alert('XSS'));... 打工人尚勤 安全 2026-02-12 21:11:25 1 回答 11 浏览 前端项目中如何用SAST工具检测XSS漏洞? 最近在做安全开发生命周期的实践,想在CI里集成SAST工具自动扫描XSS问题。但试了几个工具(比如SonarQube、ESLint插件)都没能准确识别出我这段模板里的危险用法,是我写法太隐蔽还是配置不... Designer°奕诺 安全 2026-02-28 14:48:26 2 回答 20 浏览 前端被XSS攻击了,应急响应该怎么做? 我们线上 Vue 项目突然收到用户反馈,页面里弹出了奇怪的 alert,怀疑是 XSS 攻击。我看了下代码,确实有个地方直接用了 v-html 渲染用户输入的内容,但之前没做任何过滤。现在想知道:一旦... 设计师红芹 安全 2026-02-24 19:23:19 1 回答 23 浏览 Data URL 在 Vue 中如何安全地用于图片 src 防 XSS? 我在 Vue 项目里用用户上传的 base64 图片直接赋值给 img 的 src,担心会有 XSS 风险。比如下面这样写: <template> <img :src="userPr... 丽珍 安全 2026-02-23 23:05:18 1 回答 104 浏览 前端应急响应时如何快速定位XSS漏洞的攻击入口? 最近在处理一个紧急安全事件,发现有人利用表单提交功能注入了XSS脚本。我们用了OWASP ZAP扫描,但始终找不到具体漏洞点。前端代码里有个动态渲染的评论区,像这样: <div id="comm... 慕容昕彤 安全 2026-02-19 09:06:33 2 回答 31 浏览 React里设置了X-XSS-Protection头页面却变空白了? 最近在给React项目加固安全配置,按教程加了X-XSS-Protection头,结果页面直接变空白了。明明后端已经设置过响应头,为什么前端代码里再配置就会出问题? 我尝试在App.js里这样写: f... 司马卫红 安全 2026-02-12 23:55:23 1 回答 26 浏览 Nessus扫描显示React组件存在XSS漏洞,但代码已经过滤输入了怎么办? 大家好,我在用Nessus扫描公司前端项目时,发现一个React组件被标记为XSS漏洞。但代码明明已经用了DOMPurify过滤输入,这是怎么回事? 我的代码是这样的: import DOMPurif... 设计师锦灏 安全 2026-02-10 12:07:31 1 回答 38 浏览 前端用JWT时,如何防止Token被XSS攻击窃取? 我在项目里用localStorage存JWT token,但同事说这样容易被XSS攻击,我试过把token加密存进去,但后端验证时解密失败了。现在改成用httpOnly的cookie,但axios发请... 百里国娟 前端 2026-02-09 16:08:30
<img src=x onerror=alert(1)>实际上会被浏览器当作纯文本,但如果你是用innerHTML插入字符串,它会触发 HTML 解析,而 DOMPurify 需要你显式告诉它「这是原始 HTML 字符串」——不过你这段其实没问题,真正的问题是:你是不是在别的地方又把clean当作 HTML 再次解析了?比如用eval或new Function?最可能的原因是你把
clean用innerHTML插入后,浏览器又重新解析了一次,而 DOMPurify 只清洗了一次。修复方案:直接用
textContent或者确保只插入一次,或者加上{RETURN_TRUSTED_TYPE: true}配置避免二次解析: