Spring Boot微服务CORS/CSRF配置引发Checkmarx XSRF风险如何解决
告警原因
Checkmarx属于静态代码扫描工具,规则配置为只要检测到Spring Security配置中显式调用csrf().disable(),就会触发CSRF风险告警,它无法自动识别你的服务已经通过全链路idtoken校验实现了等效的CSRF防护能力。
CSRF攻击的核心前提是浏览器会自动携带Cookie、Session类的身份凭证,你所用的idtoken一般存放于Authorization等自定义请求头中,跨站请求时不会被浏览器自动携带,因此当前配置确实符合安全要求,属于扫描工具的误报。
解决方案
你可以根据团队流程选择以下任意一种方案处理:
- 代码调整适配扫描规则
不要直接全局关闭CSRF,改为明确配置忽略所有路径的CSRF校验,同时补充配置无状态会话策略,大部分Checkmarx版本会识别这类配置为有意的安全设计而非疏漏:import org.springframework.security.config.http.SessionCreationPolicy; @Configuration @EnableWebSecurity public class Security extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity httpSecurity) throws Exception { httpSecurity.cors().and() // 全链路请求通过请求头idtoken校验身份,跨站请求无法自动携带该凭证,无需CSRF防护 .csrf().ignoringAntMatchers("/**").and() // 明确配置服务为无状态架构,无会话类凭证 .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); } } - 提交误报豁免申请
如果团队安全流程支持误报标注,直接提交该问题的豁免申请,附上说明:该服务为无状态API服务,所有身份校验依赖请求头中携带的idtoken,不存在Cookie、Session等浏览器可自动携带的身份凭证,无CSRF攻击利用条件,符合Spring安全规范中无状态架构关闭CSRF的要求。
内容的提问来源于stack exchange,提问作者Arkhion
相关产品推荐
相关产品推荐

