spring boot 官方guides中的/actuator/shutdown

本文介绍如何通过SpringBoot的Actuator模块实现HTTP方式关闭正在运行的应用。需在application.properties配置文件中启用shutdown端点并暴露所有端点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring boot 官方guides中的

There is also a /actuator/shutdown endpoint, but it’s only visible by default via JMX. To enable it as an HTTP endpoint, add management.endpoints.shutdown.enabled=true to your application.properties file.

也就是说,我们可以通过localhost:8080/actuator/shutdown来停止服务器。当然这个功能开起来风险比较大。但官网提出来了,个人想试试。但按照官网的方法,在application.properties中添加management.endpoints.shutdown.enabled=true不好用。在网上找了半天资料,结合自己的尝试成功了,在此分享一下。
总共分2步
第一步:在application.properties中添加如下代码
#启用shutdown
management.endpoint.shutdown.enabled=true
#开启所有的端点
management.endpoints.web.exposure.include=*

这时候我们请求,后台会提示 Request method ‘GET’ not supported。也就是说不支持get请求,我们需要用post.

第二步:按照官网的说明,执行$ curl -X POST localhost:8080/actuator/shutdown
windows在cmd中执行即可。
这时候,就会提示 {“message”:“Shutting down, bye…”}。

再访问应用,就已经停掉了。

### /actuator/env 端点远程代码执行漏洞原理 Spring Boot Actuator 的 `/actuator/env` 端点用于暴露应用程序的环境变量和配置属性。攻击者可以通过构造特定的请求,利用该端点的某些特性执行任意代码。其原理主要涉及以下几个方面: 1. **暴露敏感信息**:默认情况下,`/actuator/env` 端点会暴露应用程序的环境变量和配置信息。如果这些信息中包含敏感数据(如数据库连接字符串、API密钥等),攻击者可以利用这些信息进一步攻击系统。 2. **动态配置注入**:Spring Boot 应用允许通过环境变量或配置文件动态设置某些属性。如果这些属性被用于执行某些操作(如日志路径、文件路径等),攻击者可以通过修改这些属性注入恶意代码[^1]。 3. **与SpEL表达式结合**:Spring Expression Language (SpEL) 是 Spring 框架中的一种强大表达式语言,允许在运行时动态解析和执行表达式。如果应用程序中存在将 `/actuator/env` 端点的值直接传递给 SpEL 解析器的逻辑,攻击者可以通过构造恶意表达式执行任意代码[^1]。 ### 修复方法 为了修复 `/actuator/env` 端点的远程代码执行漏洞,可以采取以下措施: 1. **限制端点暴露范围**:在 `application.properties` 或 `application.yml` 中配置 `management.endpoints.web.exposure.include` 属性,仅暴露必要的端点。例如,仅暴露健康检查和指标端点: ```properties management.endpoints.web.exposure.include=health,metrics ``` 或者在 `application.yml` 中: ```yaml management: endpoints: web: exposure: include: health,metrics ``` 这样可以避免 `/actuator/env` 等敏感端点被暴露给外部用户[^1]。 2. **启用安全认证**:通过集成 Spring Security,为 Actuator 端点添加访问控制。例如,在 `pom.xml` 中添加 Spring Security 依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ``` 然后在 `application.yml` 中配置安全规则: ```yaml spring: security: user: name: admin password: securepassword ``` 这样,只有经过认证的用户才能访问 Actuator 端点[^4]。 3. **禁用敏感端点**:如果不需要使用 `/actuator/env` 端点,可以直接禁用它。在 `application.yml` 中添加以下配置: ```yaml management: endpoint: env: enabled: false ``` 这样可以完全关闭 `/actuator/env` 端点,避免潜在的安全风险[^5]。 4. **输入验证与过滤**:如果必须使用 `/actuator/env` 端点,确保对输入的环境变量和配置属性进行严格的验证和过滤。避免直接将用户输入的值传递给 SpEL 解析器或其他可能执行代码的逻辑。 5. **更新依赖版本**:确保使用的 Spring BootSpring Security 版本是最新的,以获得最新的安全修复和功能改进。定期检查依赖项是否存在已知漏洞,并及时更新。 6. **日志与监控**:启用详细的日志记录和监控功能,及时发现和响应异常行为。例如,使用 Prometheus 和 Grafana 监控 Actuator 端点的访问情况,设置警报规则以检测潜在的攻击行为[^4]。 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值