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未授权访问漏洞内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Elasticsearch QueryBuilder简单查询实现解析

    Elasticsearch QueryBuilder简单查询实现解析

    这篇文章主要介绍了Elasticsearch QueryBuilder简单查询实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Java线程休眠之sleep方法详解

    Java线程休眠之sleep方法详解

    这篇文章主要介绍了Java线程休眠之sleep方法详解,Thread 类中有一个静态方法的sleep方法,当该线程调用sleep方法后,就会暂时让CPU的调度权,但是监视器资源比如锁并不会释放出去,需要的朋友可以参考下
    2024-01-01
  • SpringBoot2种单元测试方法解析

    SpringBoot2种单元测试方法解析

    这篇文章主要介绍了SpringBoot2种单元测试方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • xxl-job定时任务配置应用及添加到springboot项目中实现动态API调用

    xxl-job定时任务配置应用及添加到springboot项目中实现动态API调用

    XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展,本篇文章主要是对xuxueli的xxl-job做一个简单的配置,以及将其添加到自己已有的项目中进行api调用,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • SpringBoot+layui实现文件上传功能

    SpringBoot+layui实现文件上传功能

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。这篇文章主要介绍了SpringBoot+layui实现文件上传,需要的朋友可以参考下
    2018-09-09
  • JMS简介与ActiveMQ实战代码分享

    JMS简介与ActiveMQ实战代码分享

    这篇文章主要介绍了JMS简介与ActiveMQ实战代码分享,具有一定借鉴价值,需要的朋友可以参考下
    2017-12-12
  • java多线程Future和Callable类示例分享

    java多线程Future和Callable类示例分享

    JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。今天我们就来研究下Future和Callable的实现方法
    2016-01-01
  • Spring Boot 动态数据源示例(多数据源自动切换)

    Spring Boot 动态数据源示例(多数据源自动切换)

    本篇文章主要介绍了Spring Boot 动态数据源示例(多数据源自动切换),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • java中循环删除list中元素的方法总结

    java中循环删除list中元素的方法总结

    下面小编就为大家带来一篇java中循环删除list中元素的方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • java门禁系统面向对象程序设计

    java门禁系统面向对象程序设计

    这篇文章主要为大家详细介绍了java门禁系统面向对象程序设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01

最新评论