Nessus扫描显示React组件存在XSS漏洞,但代码已经过滤输入了怎么办?
大家好,我在用Nessus扫描公司前端项目时,发现一个React组件被标记为XSS漏洞。但代码明明已经用了DOMPurify过滤输入,这是怎么回事?
我的代码是这样的:
import DOMPurify from 'dompurify';
function Comment({ content }) {
const sanitized = DOMPurify.sanitize(content);
return <div dangerouslySetInnerHTML={{ __html: sanitized }} />;
}
我已经尝试过以下方法:
1. 确认DOMPurify版本是最新版2.4.0
2. 手动添加了转义处理:replace(/</g, '<')
3. 检查了所有输入来源是否都经过处理
但Nessus仍然报告该组件存在反射型XSS漏洞。测试人员用 payloads测试时,控制台确实没有执行脚本,但工具还是显示漏洞存在。这到底是工具误报,还是哪里没过滤到位?
你的写法本身没问题,DOMPurify + dangerouslySetInnerHTML是React里处理富文本的标准做法。但扫描器不懂这个,它看到的是“用户输入 content 出现在了页面中”,然后就报警了。
你可以这么处理:
第一,确认DOMPurify真的生效了。加个测试用例,比如传入
第二,检查是不是有其他路径绕过了净化。比如content有没有可能在别的地方被拼进字符串再渲染?或者有没有服务端直接吐HTML的情况?Nessus可能是在测后端接口。
第三,如果确认前端没问题,那就是误报。你需要整理测试证据:比如截图显示payload没执行、DOMPurify的输出日志、请求响应体里的内容。拿这些去跟安全团队沟通,说明这是工具的误判。
另外建议加一层防御,比如给DOMPurify配配置:
限制只允许最基本的标签,进一步降低风险。
总结:你代码没问题,大概率是Nessus误报,但得用证据去说服审计方。