Spring Boot Actuator未授权访问漏洞的问题解决

 更新时间:2023年09月18日 14:48:33   作者:Storm Mun  
Spring Boot Actuator 端点的未授权访问漏洞是一个安全性问题,可能会导致未经授权的用户访问敏感的应用程序信息,本文就来介绍一下解决方法,感兴趣的可以了解一下

1.问题

Spring Boot Actuator 端点的未授权访问漏洞是一个安全性问题,可能会导致未经授权的用户访问敏感的应用程序信息。
可是并不用太过担心,Spring Boot Actuator 默认暴漏的信息有限,一般情况下并不会暴露敏感数据。
注册中心有些功能集成了actuator,如果同时使用eureka和actuator,可以在eureka中点击注册链接查看健康状态信息(/actuator/info)。但是删除 Spring Boot Actuator 的引用对 Eureka 注册中心本身并没有直接影响。Eureka 注册中心是用于管理微服务实例的,而 Spring Boot Actuator 提供了用于监控和管理单个微服务实例的功能。
Spring Boot Actuator 的存在与否不会影响 Eureka 注册中心的核心功能,即注册和发现微服务。删除 Spring Boot Actuator 的引用只会影响您的单个微服务实例,使您失去了通过 Actuator 暴露的一些监控和管理功能。

2. 解决方案

2.1 关闭不必要的端点

在默认情况下,Spring Boot Actuator 并不会暴露所有端点。您可以在配置文件中配置 management.endpoints.web.exposure.include 或 management.endpoints.web.exposure.exclude 属性,以控制哪些端点是公开的或不公开的。确保只公开需要的端点,将不必要的端点关闭。

management:
  endpoints:
    enabled-by-default: false
    health: 
      enabled: true  
    web:
      base-path: /myownurl
      exposure:
        exclude: '*'

2.2 添加访问权限控制

您可以通过配置 Spring Security 来限制对 Actuator 端点的访问。Spring Security 可以帮助您实现身份验证和授权机制,确保只有授权的用户可以访问 Actuator 端点。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/actuator/**").hasRole("ADMIN") // 设置只有具有 ADMIN 角色的用户可以访问 Actuator 端点
                .anyRequest().permitAll()
            .and()
            .httpBasic(); // 启用基本认证
    }
}

3. 了解actuator

3.1 概念

Spring Boot Actuator 是 Spring Boot 框架中的一个模块,它提供了一组用于监控和管理 Spring Boot 应用程序的功能。Actuator 使开发人员能够在应用程序运行时了解应用程序的状态、性能和健康情况,以及一些管理操作。它主要有以下作用:

应用程序健康监控:Actuator 提供了 /actuator/health 端点,可以用来检查应用程序的健康状态。这对于自动化运维、监控系统和负载均衡器非常有用。您可以在应用程序发生问题时通过此端点检查应用程序是否健康,以及有关问题的更多信息。

度量指标:通过 /actuator/metrics 端点,可以获取关于应用程序运行状态的度量指标,如内存使用、线程数、HTTP 请求等。这些指标对于性能优化和容量规划很有帮助。

应用程序信息:通过 /actuator/info 端点,您可以暴露自定义的应用程序信息,如版本号、作者、描述等。这对于构建信息展示页面或者提供有关应用程序的元数据很有用。

Spring Beans 和 Endpoints 显示:通过 /actuator/beans 和 /actuator/mappings 端点,您可以查看应用程序中所有的 Spring Bean 和 Spring MVC 的映射路径,这对于调试和监控应用程序的组件很有帮助。

环境属性和配置:通过 /actuator/env 端点,可以查看应用程序的环境属性和配置信息。

日志级别管理:通过 /actuator/loggers 端点,您可以查看和修改应用程序的日志级别。

HTTP 请求跟踪:通过 /actuator/trace 端点,您可以查看最近的 HTTP 请求的跟踪信息,用于排查问题。

Spring Boot Actuator 提供了丰富的端点,以帮助开发人员更好地理解和管理他们的应用程序。它在监控、调试和运维方面提供了强大的功能,是构建可管理的 Spring Boot 应用程序的重要工具。

3.2 配置详情

在默认情况下,Spring Boot Actuator 公开了一些常用的端点,但也有一些端点是不公开的。这是为了安全性考虑,避免在生产环境中泄漏敏感信息。

以下是 Spring Boot 2.x 版本默认情况下公开的一些端点:

/actuator/health:公开,默认允许所有用户访问。提供应用程序的健康状况信息。

/actuator/info:公开,默认允许所有用户访问。提供自定义的应用程序信息。

/actuator/metrics:不公开,默认不允许访问。提供各种度量指标,如内存使用、线程数、HTTP 请求等。

/actuator/mappings:不公开,默认不允许访问。展示 Spring MVC 中的所有映射路径。

/actuator/env:不公开,默认不允许访问。显示应用程序的环境属性和配置。

/actuator/beans:不公开,默认不允许访问。显示 Spring Bean 的列表。

/actuator/trace:不公开,默认不允许访问。显示最近的 HTTP 请求的跟踪信息。

/actuator/threaddump:不公开,默认不允许访问。生成当前线程的线程转储。

/actuator/auditevents:不公开,默认不允许访问。提供应用程序的审计事件信息。

/actuator/loggers:不公开,默认不允许访问。显示和修改应用程序的日志配置。

/actuator/httptrace:不公开,默认不允许访问。提供 HTTP 跟踪信息,用于记录 HTTP 请求和响应的详细信息。

您可以通过在配置文件中使用 management.endpoints.web.exposure.include 或 management.endpoints.web.exposure.exclude 属性来控制哪些端点是公开的或不公开的。默认情况下,info 和 health 是允许公开的。
例如,以下配置将会关闭 mappings 端点的公开:
关闭 mappings 端点的公开
management.endpoints.web.exposure.exclude=mappings
根据您的需求,您可以灵活地配置哪些 Actuator 端点是可以访问的。确保在生产环境中仅公开必要的端点,并保护敏感信息。

3.3 注意事项

  • springboot项目不会默认导入Spring Boot Actuator
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • 如果其他组件有引入但是不知道是哪个组件,使用传递依赖引入,进入项目根目录,使用mvn dependency:tree列出所有依赖项及其传递依赖项。

 到此这篇关于Spring Boot Actuator未授权访问漏洞的问题解决的文章就介绍到这了,更多相关Spring Boot Actuator未授权访问漏洞内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中random的用法小结

    java中random的用法小结

    这篇文章主要介绍了java中random的用法详解,主要包括java.lang.Math.random()方法的用法及java.util.Random类用法,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Spring Cloud 的 Hystrix.功能及实践详解

    Spring Cloud 的 Hystrix.功能及实践详解

    这篇文章主要介绍了Spring Cloud 的 Hystrix.功能及实践详解,Hystrix 具备服务降级、服务熔断、线程和信号隔离、请求缓存、请求合并以及服务监控等强大功能,需要的朋友可以参考下
    2019-07-07
  • Java线程使用同步锁交替执行打印奇数偶数的方法

    Java线程使用同步锁交替执行打印奇数偶数的方法

    这篇文章主要介绍了Java线程使用同步锁交替执行打印奇数偶数的方法。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • JAVA实现往字符串中某位置加入一个字符串

    JAVA实现往字符串中某位置加入一个字符串

    这篇文章主要介绍了JAVA实现往字符串中某位置加入一个字符串,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 实例展示使用Java压缩和解压缩7z文件的方法

    实例展示使用Java压缩和解压缩7z文件的方法

    这篇文章主要介绍了实例展示使用Java压缩和解压缩7z文件的方法,用到了7-zip的开源项目7-zip-JBinding,需要的朋友可以参考下
    2015-11-11
  • Simple JSON开发指南

    Simple JSON开发指南

    注意:JSONPauser不是线程安全的,需要的朋友可以参考下
    2016-04-04
  • Java读取json数据并存入数据库的操作代码

    Java读取json数据并存入数据库的操作代码

    很多朋友问大佬们JAVA怎么把json存入数据库啊,这一问题就把我难倒了,纠结如何操作呢,下面小编把我的经验分享给大家,感兴趣的朋友一起看看吧
    2021-08-08
  • Mybatis的parameterType造成线程阻塞问题分析

    Mybatis的parameterType造成线程阻塞问题分析

    这篇文章主要详细分析了Mybatis的parameterType造成线程阻塞问题,文中有详细的解决方法,及相关的代码示例,具有一定的参考价值,感兴趣的朋友可以借鉴阅读
    2023-06-06
  • postman中POST请求时参数包含参数list设置方式

    postman中POST请求时参数包含参数list设置方式

    这篇文章主要介绍了postman中POST请求时参数包含参数list设置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • IDEA中如何引入spring的命名空间

    IDEA中如何引入spring的命名空间

    这篇文章主要介绍了IDEA中如何引入spring的命名空间问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04

最新评论