0

0

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

霞舞

霞舞

发布时间:2025-10-05 11:57:01

|

738人浏览过

|

来源于php中文网

原创

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

Musico
Musico

Musico 是一个AI驱动的软件引擎,可以生成音乐。 它可以对手势、动作、代码或其他声音做出反应。

下载

以下是一个示例:

@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 配置,以确保其仍然满足你的安全需求。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

98

2025.08.06

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

266

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

385

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

1045

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1673

2024.08.16

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1673

2024.08.16

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

319

2023.10.09

vb连接access数据库的方法
vb连接access数据库的方法

vb连接access数据库方法:1、使用ADO连接,首先导入System.Data.OleDb模块,然后定义一个连接字符串,接着创建一个OleDbConnection对象并使用Open() 方法打开连接;2、使用DAO连接,首先导入 Microsoft.Jet.OLEDB模块,然后定义一个连接字符串,接着创建一个JetConnection对象并使用Open()方法打开连接即可。

370

2023.10.16

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
php注册登录系统开发实战
php注册登录系统开发实战

共10课时 | 13.4万人学习

PHP基于Cookie的购物车模块设计
PHP基于Cookie的购物车模块设计

共10课时 | 10.7万人学习

第三期培训_PHP开发
第三期培训_PHP开发

共116课时 | 25.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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