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: falsehealth: enabled: true  web:base-path: /myownurlexposure:exclude: '*'

2.2 添加访问权限控制

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

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected 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 注意事项

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/29969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins+Docker+SpringCloud微服务持续集成

JenkinsDockerSpringCloud微服务持续集成 JenkinsDockerSpringCloud持续集成流程说明SpringCloud微服务源码概述本地运行微服务本地部署微服务 Docker安装和Dockerfile制作微服务镜像Harbor镜像仓库安装及使用在Harbor创建用户和项目上传镜像到Harbor从Harbor下载镜像 微服务持…

RK3568蓝牙程序开发过程

1、搭建蓝牙开发环境 蓝牙开发可以使用C语言开发或python语言开发&#xff0c;使用的是蓝牙开发库为bluez库。 本文开发使用python语言开发&#xff0c;安装bluez库&#xff0c;可以使用pip install PyBluez来安装。 如果安装不上的话&#xff0c;可以使用sudo apt install pyt…

Kafka与Zookeeper版本对应关系

文章目录 了解版本对应Kafka安装包Kafka源码包 了解 比如&#xff1a; kafka_2.11-1.1.1.jar包 其中2.11表示的是Scala的版本&#xff0c;因为Kafka服务器端代码完全由Scala语音编写。”-“后面的1.1.1表示的kafka的版本信息。遵循一个基本原则&#xff0c;Kafka客户端版本和服…

无涯教程-Perl - getnetbyname函数

描述 此函数返回由NAME指定的网络信息(在列表context中)($name,$aliases,$addrtype,$net) 语法 以下是此函数的简单语法- getnetbyname NAME返回值 此函数在错误时返回undef,否则在标量context中返回网络地址,在错误时返回空列表,否则在列表context中返回网络记录(名称,别…

pandas 笔记 date_range

返回固定频率下的datetime 1 使用方法 pandas.date_range(startNone, endNone, periodsNone, freqNone, tzNone, normalizeFalse, nameNone, inclusiveboth, *, unitNone, **kwargs) 2 基本参数 start、end、periods至少需要两个 start生成日期的左边界end生成日期的右边界…

错误: XXXAdapter不是抽象的, 并且未覆盖Adapter中的抽象方法onBindViewHolder(ViewHolder,int)

一、问题描述 在学习Android可侧滑删除的RecyclerView的时候&#xff0c;遇到了下面的报错 错误: SwipeDelAdapter不是抽象的, 并且未覆盖Adapter中的抽象方法onBindViewHolder(ViewHolder,int) public class SwipeDelAdapter extends RecyclerView.Adapter { ^ 在上面的…

java springboot word文档转pdf

java springboot word文档转pdf 1、环境2、依赖3、代码 1、环境 1、java、springboot 2、maven或者gradle 3、办公软件&#xff08;自己电脑上的wps或者office等&#xff0c;如果部署到服务器上也要安装&#xff0c;linux、Mac 都有&#xff0c;自己安装&#xff09; 可能会遇…

用zabbix实现web监控

上篇我们说到了用最简单的web页面监控&#xff0c;如果你的页面只有ip和port就可以访问的话&#xff0c;那么简单的监测没有问题了。如果……开发给你的网站在后边加了个目录呢&#xff1f;那么就绕不开了web场景监控了。 一、添加模板 在【模板】上新建一个模板&#xff0c;…

操作系统—调度算法

进程调度算法 进程调度算法也称CPU调度算法 调度发生时期 当进程从运行状态转到等待状态&#xff1b;当进程从运行状态转到就绪状态&#xff1b;当进程从等待状态转到就绪状态&#xff1b;当进程从运行状态转到终止状态&#xff1b; 其中发生在 1 和 4 两种情况下的调度称为…

[QCM6125][Android13] 关闭救援模式

文章目录 开发平台基本信息问题描述解决方法 开发平台基本信息 芯片: QCM6125 版本: Android 13 kernel: msm-4.14 问题描述 安装系统在未响应5分钟的时候&#xff0c;系统会自动进入救援模式&#xff0c;这时候需要通过音量键和电源键进行操作才能再次进入系统。对于无人值…

物理层扩展以太网

扩展站点与集线器之间的距离&#xff1a;   在10BASE-T星型以太网中&#xff0c;可使用光纤和一对光纤调制解调器来扩展站点与集线器之间的距离。   为站点和集线器各增加一个用于电信号和光信息号转换的光纤调制解调器&#xff0c;以及他们之间的通信光纤。 扩展共享式以太…

Unity开发笔记:截取指定位置含有UI的场景截图并输出

学习记录整理&#xff0c;自用&#xff0c;也希望能帮助到有相同需求的人。 如果直接截全图&#xff1a; string screenshotName "Assets/Textures/UI/20230803/2.png";ScreenCapture.CaptureScreenshot(screenshotName);截取指定位置含有UI的场景截图&#xff1a; …

uniapp input输入框placeholder文本右对齐

input输入框placeholder文本右对齐 给input标签加上placeholder-class&#xff0c;这个是给placeholder设置样式&#xff0c;右对齐这就是text-align:right;字体颜色之类依次编辑即可。

flutter开发实战-TextPainter计算文本内容的宽度

flutter开发实战-TextPainter计算文本内容的宽度 最近开发过程中根据Text文本的大小判断是否需要进行显示跑马灯效果&#xff0c;获取文本的大小&#xff0c;需要TextPainter来获取Size 一、TextPainter TextPainter主要用于实现文本的绘制。TextPainter类可以将TextSpan渲染…

Babylon.js着色器简明简称【Shader】

推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景 为了生成 BabylonJS 场景&#xff0c;需要用 Javascript 编写代码&#xff0c;BabylonJS 引擎会处理该代码并将结果显示在屏幕上。 场景可以通过改变网格、灯光或摄像机位置来改变。 为了及时显示可能的变化&#xff0c;屏…

JS实现数组扁平化的 8 种方式

八种数组扁平化方法的使用场景和优缺点 以下是八种数组扁平化方法的使用场景和优缺点&#xff1a; 1. 使用递归&#xff1a; 使用场景&#xff1a;当需要对任意层级的嵌套数组进行扁平化时&#xff0c;递归是一种简单且通用的方法。优点&#xff1a;简单易懂&#xff0c;适用…

【架构设计】如何设计一个高性能短链系统

一、前言 所谓系统设计&#xff0c;就是给一个场景&#xff0c;让你给出对应的架构设计&#xff0c;需要考虑哪些问题&#xff0c;采用什么方案解决。很多面试官喜欢出这么一道题来考验你的知识广度和逻辑思考能力。 虽然各个系统千差万别&#xff0c;但是设计思想基本一致&a…

【考研复习】24王道数据结构课后习题代码|2.3线性表的链式表示

文章目录 总结01 递归删除结点02 删除结点03 反向输出04 删除最小值05 逆置06 链表递增排序07 删除区间值08 找公共结点09 增序输出链表10 拆分链表--尾插11 拆分链表--头插12 删除相同元素13 合并链表14 生成含有公共元素的链表C15 求并集16 判断子序列17 判断循环链表是否对称…

Android Studio实现刮刮卡效果

代码和刮刮乐图片参考网络 实现效果 MainActivity import android.app.Activity; import android.os.Bundle;public class MainActivity extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentVi…

ruoyi-cloud微服务新建子模块

ruoyi-cloud微服务新建子模块 1、复制system模块 直接复制 modules下面已有的system模块&#xff0c;改名为 test 2、在modules下的 pom.xml文件中添加子模块 3、进入 test模块修改 pom.xml 把原有的system 修改成test 4、修改对应的包名、目录名和启动应用程序为test 5、修…