前端漏洞扫描工具报XSS风险,但我用了DOMPurify啊?

振莉 Dev 阅读 10

最近用公司内部的漏洞扫描工具扫了下项目,结果提示有个输入框存在XSS风险。可我明明已经用 DOMPurify 对用户输入做了清洗,不知道问题出在哪。

我的代码大概是这样:

<div id="user-content"></div>
<script>
  const userInput = new URLSearchParams(window.location.search).get('msg');
  const clean = DOMPurify.sanitize(userInput);
  document.getElementById('user-content').innerHTML = clean;
</script>

是不是 DOMPurify 配置不对?还是说 innerHTML 本身就危险,就算清洗过也不行?

我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
Prog.俊蓓
看了你的代码,其实用法没问题,DOMPurify 配置也是正确的。这个问题大概率是扫描工具的误报。

很多静态扫描工具比较"傻",只要看到 innerHTML 就会报警告,它根本不会去分析你前面是不是已经做过清洗了。这种工具我见多了,动不动就报一堆误报,然后还得我们一个个去确认,累得很。

你可以手动测试一下,试试输入类似 或者 这种典型的 XSS payload,看看 DOMPurify 有没有正确过滤掉危险部分。正常情况下这些都会被清洗掉,只保留安全的内容。

不过有一点要注意,确保 DOMPurify 库确实被正确加载了。如果脚本加载失败或者顺序有问题,DOMPurify.sanitize 可能直接报错或者返回 undefined,那 innerHTML 就真的危险了。可以在控制台打印一下 typeof DOMPurify 确认一下。

如果你想让扫描工具闭嘴,可以考虑用 textContentinnerText 替代 innerHTML,但这样就没法渲染富文本了。如果你的业务确实需要渲染 HTML 标签,那 innerHTML 配合 DOMPurify 就是标准做法,扫描工具报就报吧,写个说明文档解释一下就行。

希望能帮到你!
点赞 1
2026-02-28 20:15