系统运维

紧急!Spring Boot安全漏洞

字号+作者:益华科技来源:系统运维2025-11-05 01:18:45我要评论(0)

环境:Spring Boot 2.7.181. 简介Spring Boot Actuator 模块提供了 Spring Boot 生产就绪的所有功能。Actuator提供的所有接口可让你监控应用程序各

环境:Spring Boot 2.7.18

1. 简介

Spring Boot Actuator 模块提供了 Spring Boot 生产就绪的紧急所有功能。Actuator提供的安全所有接口可让你监控应用程序各种信息并与之交互。Spring Boot 包含许多内置接口,漏洞你还可以添加自定义的紧急接口。例如,安全health 接口提供基本的漏洞应用程序健康信息。有关Actuator的紧急更多介绍可以查看官方文档,本篇文章主要讲解关于在生产环境中对Actuator的安全使用或控制不当,可能会引发安全隐患。漏洞为了避免这些问题,紧急我们需要谨慎配置和使用Actuator。安全

2. 安全漏洞

当在项目中启用Actuator后,漏洞默认情况下我们是紧急可以没有限制的访问任意一个接口的,如下配置:

复制management: endpoints: web: cors: allow-credentials: true allowed-headers: * allowed-origins: base-path: /ac exposure: include: *1.2.3.4.5.6.7.8.9.10.

以上配置,安全暴露了默认Actuator的漏洞所有接口。而这些接口中有些接口暴露的信息就非常的敏感,如:/env,/configprops,/threaddump等接口,这些接口直接会将所有信息展现出来。

/configprops接口

图片

/env接口

图片

/threaddump接口

图片

上面这些接口任其随意访问是有很大风险的服务器租用(安全部门只要扫到你网站有这些问题都会通知你处理)尤其是上面的/configprops接口,很可能无意间就暴露了你的隐私信息。

3. 解决办法

3.1 配置属性

针对/configprops接口在上面的图中你会发现对于password这样的key系统默认会进行脱敏处理,在默认情况下springboot会对如下的key进行处理:以 "password"、"secret"、"key"、"token"、"vcap_services"、"sun.java.command "结尾的key都会被完全清除。

注意:只要是以这些key结尾的都会处理

自定义的属性配置bean是否会处理呢?验证如下:

复制@ConfigurationProperties(prefix = "pack.sys") public class PackProperties { private String name ; private String password ; private String idNo ; } // 配置文件 pack: sys: name: pack password: 123123 idNo: 110991119199191911.2.3.4.5.6.7.8.9.10.11.12.13.14.

查看结果:

图片

password字段被自动的脱敏处理。但是对于这里的idNo我也希望能够脱敏处理又该如何处理呢?通过修改字段名以支持SpringBoot支持的默认命名规则,你应该不会去修改字段名称吧~!如下修改后的效果:

图片

其实完全没有必要这样做,SpringBoot提供了自定义key的方式

复制management: endpoint: configprops: additional-keys-to-sanitize: - idNo1.2.3.4.5.

通过上面的属性节点,可以添加你需要处理的网站模板key。

图片

当你的key是以这种模式命名时:.*credentials.* 包含credentials时系统也会自动的进行脱敏处理

图片

此外,Spring Boot 还会对带有以下结尾之一的key的 URI 类值的敏感部分进行脱敏:

addressaddressesuriurisurlurls

URI 的敏感部分使用<scheme>://<username>:<password>@<host>:<port>/格式标识。如下配置示例:

复制pack: sys: name: pack password: 123123 idNo: 11099111919919191 packCredentials: 66666666 ftpUrl: ftp://pack:123456@xxxooo.pack.com/1.2.3.4.5.6.7.

展示结果:

图片

自动将密码部分脱敏处理。

3.2 环境信息

对于/env接口,也是有对应的配置属性进行配置

复制management: endpoint: env: additional-keys-to-sanitize: - port - ... 添加更多的自定义key1.2.3.4.5.6.

与配置属性一样通过通用的方式添加额外的key进行脱敏处理。

注意:对于env和configprops接口都有一个相同的属性keys-to-sanitize,该属性也可以定义你需要脱敏处理的key,该属性有相同的默认值:password,secret,key,token,.credentials.,vcap_services,sun.java.command

3.3 自定义脱敏规则

如果你希望更多的控制脱敏规则,那么你可以通过自定义SanitizingFunction Bean。

复制@Component public class PackSanitizingFunction implements SanitizingFunction { @Override public SanitizableData apply(SanitizableData data) { if (data.getKey().endsWith("email")) { return data.withValue("###") ; } return data ; } }1.2.3.4.5.6.7.8.9.10.11.12.

输出结果:

图片

3.4 其它接口安全配置

对于像/threaddump,/heapdump这样的接口,我们要么将其禁用,要么通过Spring Security进行安全控制,如下示例通过Spring Security进行安全控制。

复制@Bean SecurityFilterChain actuatorSecurityFilterChain(HttpSecurity http) throws Exception { http.csrf(csrf -> csrf.disable()); http.authorizeHttpRequests().antMatchers("/ac/env").hasRole("ADMIN") ; http.authorizeHttpRequests().antMatchers("/ac/**").hasRole("ACTUATOR") ; http.authorizeHttpRequests().anyRequest().permitAll() ; http.formLogin(customizer -> Customizer.withDefaults()) ; return http.build() ; }1.2.3.4.5.6.7.8.9.

基于用到了Security,站群服务器你完全可以对所有的接口进行拦截控制,也就没必要进行上面那些操作了。

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 给计算机装双系统的完全教程(轻松搭建双系统,满足不同需求)

    给计算机装双系统的完全教程(轻松搭建双系统,满足不同需求)

    2025-11-05 00:07

  • Tomcat 性能调优之 JVM 调优

    Tomcat 性能调优之 JVM 调优

    2025-11-04 23:15

  • 横向对比三大分布式机器学习平台:Spark、PMLS、TensorFlow

    横向对比三大分布式机器学习平台:Spark、PMLS、TensorFlow

    2025-11-04 23:09

  • 自动化运维之后,你还在人工巡检吗?

    自动化运维之后,你还在人工巡检吗?

    2025-11-04 22:45

网友点评