如何在代码中屏蔽Sonar的Security Hotspots安全热点告警
解决方法
SonarQube的安全热点规则和普通代码检查规则的键命名规则不同:普通代码异味、BUG类规则多使用squid:前缀,而安全热点的Java类规则统一使用java:S前缀。你遇到的Spring Security CSRF防护检查对应的规则键为java:S4502,这也是你之前用squid:x格式注解无效的核心原因。
方案1:代码层面精准屏蔽
直接在触发告警的代码位置添加对应规则键的SuppressWarnings注解即可:
// 加在类上则屏蔽整个类的S4502告警,加在方法上则仅屏蔽对应方法的告警 @SuppressWarnings("java:S4502")
该方案无需修改Sonar全局配置,仅对指定代码块生效,适合仅有个别合理场景需要关闭CSRF防护的项目。
方案2:项目级全局屏蔽
如果你的项目整体不需要CSRF防护(比如纯前后端分离的RESTful接口项目,使用请求头携带Token做身份校验,天然免疫CSRF攻击),可以在项目根目录的sonar-project.properties配置文件中添加如下规则排除配置:
sonar.issue.ignore.multicriteria=disableS4502 sonar.issue.ignore.multicriteria.disableS4502.ruleKey=java:S4502 sonar.issue.ignore.multicriteria.disableS4502.resourceKey=**/*
如果仅需要排除特定文件/目录的S4502检查,将最后一行的**/*替换为对应的路径匹配规则即可,例如仅排除Security配置类时可以写成**/SecurityConfig.java。
注意
屏蔽告警前请确认你的CSRF配置是安全合理的,若存在CSRF攻击风险建议优先修复安全问题,不要直接屏蔽告警。
内容的提问来源于stack exchange,提问作者Whimusical
相关产品推荐
相关产品推荐

