首页 > Java > java教程 > 正文

解决 Checkmarx 报告的 Spring 跨域资源共享策略过于宽松问题

霞舞
发布: 2025-10-05 11:57:01
原创
727人浏览过

解决 checkmarx 报告的 spring 跨域资源共享策略过于宽松问题

本文旨在解决 Checkmarx 扫描报告中关于 Spring 应用跨域资源共享 (CORS) 策略过于宽松的问题。通过分析 @CrossOrigin 注解的使用方式,解释了为何通配符配置会导致安全风险,并提供了如何通过配置白名单来限制允许访问资源的域的示例代码和注意事项,帮助开发者提升应用的安全性。

跨域资源共享 (CORS) 简介

同源策略是浏览器的一项安全机制,它限制了来自不同源的文档或脚本对当前文档或脚本的资源进行访问。这里的“源”由协议、域名和端口组成。 CORS 是一种机制,它使用额外的 HTTP 头部来告诉浏览器,允许运行在一个 origin (域) 上的 Web 应用访问来自不同 origin 服务器上的指定资源。

Checkmarx 报告的问题:过于宽松的 CORS 策略

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 属性的值设置为一个或多个具体的域名,而不是通配符 *。

Hugging Face
Hugging Face

Hugging Face AI开源社区

Hugging Face 135
查看详情 Hugging Face

以下是一个示例:

@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。

如何查找并修改 CORS 配置

  1. 查找 @CrossOrigin 注解: 在你的 Spring 应用中搜索 @CrossOrigin 注解。 这些注解可能位于 Controller 类、方法级别,或者全局配置类中。
  2. 检查 origins 属性: 确认 origins 属性的值是否为 "*"。 如果是,则需要修改它。
  3. 修改 origins 属性: 将 origins 属性的值替换为你允许访问你的 API 的具体域名列表。 例如:origins = {"https://yourdomain.com", "https://anotherdomain.com"}。
  4. 限制 allowedHeaders: 同样,根据实际需求,限制允许的 Headers,避免使用 "*"。
  5. 测试: 修改配置后,务必进行测试,确保只有来自白名单域的请求才能成功访问你的 API。

全局 CORS 配置

除了在 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 的配置,避免过于宽松。

注意事项

  • 生产环境: 在生产环境中,务必使用白名单来限制允许访问你的 API 的域。
  • HTTPS: 建议使用 HTTPS 协议,以确保数据传输的安全性。
  • 测试: 在修改 CORS 配置后,务必进行测试,确保只有来自白名单域的请求才能成功访问你的 API。
  • 文档: 清晰地记录你的 CORS 策略,以便其他开发人员了解如何正确地使用你的 API。

总结

通过限制 CORS 策略,你可以有效地提高你的 Spring 应用的安全性,防止潜在的跨站攻击。 记住,在生产环境中,始终使用白名单来明确指定允许访问你的 API 的域。 此外,定期审查和更新你的 CORS 配置,以确保其仍然满足你的安全需求。

以上就是解决 Checkmarx 报告的 Spring 跨域资源共享策略过于宽松问题的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号