
本文旨在解决 Checkmarx 扫描报告中关于 Spring 应用跨域资源共享 (CORS) 策略过于宽松的问题。通过分析 @CrossOrigin 注解的使用方式,解释了为何通配符配置会导致安全风险,并提供了如何通过配置白名单来限制允许访问资源的域的示例代码和注意事项,帮助开发者提升应用的安全性。
同源策略是浏览器的一项安全机制,它限制了来自不同源的文档或脚本对当前文档或脚本的资源进行访问。这里的“源”由协议、域名和端口组成。 CORS 是一种机制,它使用额外的 HTTP 头部来告诉浏览器,允许运行在一个 origin (域) 上的 Web 应用访问来自不同 origin 服务器上的指定资源。
Checkmarx 扫描器报告 "The method ... sets an overly permissive CORS access control origin header" 通常意味着你的 Spring 应用的 CORS 配置允许来自任何域的请求,这会带来潜在的安全风险。
例如,以下配置就存在风险:
@CrossOrigin(origins = "*", allowedHeaders = "*", methods = {RequestMethod.GET, RequestMethod.OPTIONS, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE})上述代码中的 origins = "*" 允许来自任何域的请求访问你的 API。 虽然这在某些开发或测试场景下可能很方便,但在生产环境中,这会使你的应用容易受到跨站请求伪造 (CSRF) 等攻击。
解决此问题的关键在于使用白名单,明确指定允许访问你的 API 的域。 这意味着你需要将 origins 属性的值设置为一个或多个具体的域名,而不是通配符 *。
以下是一个示例:
@CrossOrigin(origins = "https://yourdomain.com", allowedHeaders = "Accept,Accept-Language,Content-Language,Content-Type", methods = {RequestMethod.GET, RequestMethod.OPTIONS, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE})在这个例子中,只有来自 https://yourdomain.com 的请求才会被允许访问该方法。 allowedHeaders 属性也应该根据实际需要进行限制,避免允许所有 Header。
除了在 Controller 或方法级别使用 @CrossOrigin 注解外,你还可以使用 Spring MVC 的配置类进行全局 CORS 配置。
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 拦截所有请求
.allowedOrigins("https://yourdomain.com") // 允许跨域的域名,多个可以用逗号隔开
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许跨域的方法
.allowedHeaders("*") // 允许跨域的请求头
.allowCredentials(true) // 是否允许发送cookie
.maxAge(3600); // 预检请求的有效期,单位秒。
}
}这种方式可以集中管理 CORS 策略,更易于维护。 同样,需要注意 allowedOrigins 和 allowedHeaders 的配置,避免过于宽松。
通过限制 CORS 策略,你可以有效地提高你的 Spring 应用的安全性,防止潜在的跨站攻击。 记住,在生产环境中,始终使用白名单来明确指定允许访问你的 API 的域。 此外,定期审查和更新你的 CORS 配置,以确保其仍然满足你的安全需求。
以上就是解决 Checkmarx 报告的 Spring 跨域资源共享策略过于宽松问题的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号