SAST扫描总报React组件XSS漏洞,但代码明明转义了怎么办?
最近给React项目配置了SAST工具,扫描时总提示组件存在XSS风险。代码里已经用dangerouslySetInnerHTML包裹了sanitization函数处理的数据,为什么还是报这个漏洞?
我尝试过:
1. 在ESLint配置里添加react/no-danger例外规则
2. 在SAST工具规则文件里排除该组件路径
但扫描结果还是显示高危漏洞,难道是工具误报?或者转义方法没做到位?
具体代码片段:
render() {
const sanitizedContent = DOMPurify.sanitize(this.props.userInput);
return <div dangerouslySetInnerHTML={{__html: sanitizedContent}} />;
}
工具报的是第4行存在XSS风险,但DOMPurify明明是官方推荐的防护库啊…
### 常见解决方案如下:
#### 1. **检查DOMPurify的版本和用法**
确保你用的是最新版DOMPurify,旧版本可能存在未修复的XSS处理缺陷。React官方推荐用法如下:
加上
USE_PROFILES: { html: true }这个选项能进一步确保HTML内容被严格净化。#### 2. **给SAST工具加注释说明**
有些SAST工具支持用注释跳过特定漏洞告警,例如:
如果是专用SAST工具(比如Checkmarx、SonarQube等),查一下它是否支持行级注释忽略规则。比如:
#### 3. **在SAST配置里更精确地排除规则**
你提到在规则文件里排除了组件路径,但可能没生效。检查是否路径配置错误或优先级冲突。有些工具需要在配置中明确指定:
#### 4. **考虑改用React组件替代dangerouslySetInnerHTML**
如果只是展示用户输入的富文本,可以考虑用
react-markdown或draft-js等库渲染内容,避免直接操作HTML。---
如果你已经确认DOMPurify处理是安全的,那大概率是SAST误报。不过上线前最好让安全组确认一下这块逻辑,毕竟工具不理解你写的净化逻辑,只能靠人工兜底了。
DOMPurify,就没问题,直接在扫描规则里加例外吧。懒人方案:去SAST配置文件里,针对这个组件或这一行加个注释跳过规则,比如:
实在不行,把
dangerouslySetInnerHTML换成普通文本渲染,虽然麻烦但能哄工具开心。