文章目录
- [🧾 小迪安全 · 第 39 课学习笔记](#🧾 小迪安全 · 第 39 课学习笔记)
-
- [1️⃣ Actuator 自动化页面与安全要点](#1️⃣ Actuator 自动化页面与安全要点)
- 图片展示
-
- [💡 基本概念](#💡 基本概念)
- [🧭 常见 URL 示例(默认路径)](#🧭 常见 URL 示例(默认路径))
- [⚠️ 常见漏洞与风险](#⚠️ 常见漏洞与风险)
- [🔧 自动化检测与工具](#🔧 自动化检测与工具)
- [🧩 防护建议](#🧩 防护建议)
- [🧩 在 Spring Boot 中关闭敏感 Actuator 端点](#🧩 在 Spring Boot 中关闭敏感 Actuator 端点)
-
- [🧱 一、核心思路](#🧱 一、核心思路)
- [⚙️ 二、在 application.yml 中的安全配置](#⚙️ 二、在 application.yml 中的安全配置)
-
- [🧭 说明](#🧭 说明)
- [🧩 三、使用 application.properties 的等效写法](#🧩 三、使用 application.properties 的等效写法)
- [🧠 四、可选加强措施(分层防护)](#🧠 四、可选加强措施(分层防护))
- [✅ 五、效果测试](#✅ 五、效果测试)
- [✍️ **总结:**](#✍️ 总结:)
- [2️⃣ Swagger 接口文档与安全要点](#2️⃣ Swagger 接口文档与安全要点)
-
- [💡 基本概念](#💡 基本概念)
- [🎨 界面特征](#🎨 界面特征)
- [⚠️ 常见安全风险](#⚠️ 常见安全风险)
- [🧰 关联检测方法](#🧰 关联检测方法)
- [🧩 防护建议](#🧩 防护建议)
- [3️⃣ 综合理解](#3️⃣ 综合理解)
- [🧩 关键思维收获](#🧩 关键思维收获)
🧾 小迪安全 · 第 39 课学习笔记
主题:Spring Boot Actuator 与 Swagger 接口安全分析
时间:自学整理
作者:韩昊川
1️⃣ Actuator 自动化页面与安全要点
图片展示

💡 基本概念
- Actuator :Spring Boot 提供的监控与管理模块,
可查看运行状态、环境变量、日志级别、应用信息等。 - 提供大量HTTP 端点 (endpoint),如:
/actuator/health--- 健康状态/actuator/info--- 应用信息/actuator/env--- 系统环境变量/actuator/heapdump--- JVM 堆转储/actuator/threaddump--- 线程转储
这些端点若未做访问控制,将直接暴露敏感数据。
🧭 常见 URL 示例(默认路径)
apl
http://<host>:8080/actuator
http://<host>:8080/actuator/health
http://<host>:8080/actuator/env
http://<host>:8080/actuator/heapdump
⚠️ 常见漏洞与风险
| 漏洞场景 | 风险说明 |
|---|---|
| 未授权访问 / 信息泄露 | /env 或 /configprops 中可看到数据库凭据、API 令牌、密钥等。 |
| heapdump 泄露 | /heapdump 会生成 JVM 堆快照(.hprof);可被攻击者下载并利用分析工具从中提取密码、JWT Token 等敏感信息。 |
| threaddump 泄露 | 暴露线程栈、类加载路径、系统路径结构;可推测内部框架版本。 |
🔧 自动化检测与工具
常见脚本或安全扫描器可以:
- 枚举 Actuator 端点;
- 自动下载
heapdump文件; - 分析
.hprof中的可疑字符串(Token、凭据、URL 等)。
👉 教学中展示了可利用的自动化工具,可快速完成上述操作。
1、jvisualvm分析器
需要进行安装
🔗 VisualVM 官网
👉 https://visualvm.github.io/
2、自动化提取:JDumpSpider 提取器
🧩 防护建议
-
上线前关闭未使用的端点:
YAMLmanagement: endpoints: web: exposure: exclude: env,heapdump,threaddump -
对敏感端点启用认证(如 Spring Security)。
-
在生产环境中仅开放
/health、/info等必要端点。
🧩 在 Spring Boot 中关闭敏感 Actuator 端点
🧱 一、核心思路
Spring Boot Actuator 把所有端点统一管理。
想屏蔽某些危险的端点(比如 /heapdump、/env 之类),
只需在配置文件中调整端点的 暴露策略 或 显式禁用。
⚙️ 二、在 application.yml 中的安全配置
yaml
management:
endpoints:
enabled-by-default: true # 默认启用全部端点(Spring Boot 2.x/3.x)
web:
exposure:
include: health,info # 仅暴露健康和基本信息
exclude: env,heapdump,threaddump,beans,configprops # 明确禁止列出的端点
endpoint:
# 显式关闭敏感端点
env:
enabled: false
heapdump:
enabled: false
threaddump:
enabled: false
🧭 说明
include决定哪些端点可以通过 HTTP 访问;未列出则不再公开。exclude用来排除掉指定端点。endpoint.<name>.enabled: false会彻底禁用该端点(不仅网页无法访问,管理 API 也不会注册)。
🧩 三、使用 application.properties 的等效写法
properties
management.endpoints.web.exposure.include=health,info
management.endpoints.web.exposure.exclude=env,heapdump,threaddump,configprops
management.endpoint.env.enabled=false
management.endpoint.heapdump.enabled=false
management.endpoint.threaddump.enabled=false
🧠 四、可选加强措施(分层防护)
-
添加访问鉴权
通过 Spring Security 限制
/actuator/**端点。java@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/actuator/health", "/actuator/info").permitAll() .antMatchers("/actuator/**").hasRole("ADMIN") .and() .httpBasic(); // 简单示例,生产建议使用 Token/OAuth2 } } -
在生产环境禁用 Web 暴露
yamlmanagement: endpoints: web: exposure: include: [] # 不暴露任何 Web 端点 server: port: 0 # 或单独监听端口,仅内部使用
✅ 五、效果测试
| 访问路径 | 状态 | 说明 |
|---|---|---|
/actuator/health |
200 | 可正常访问 |
/actuator/info |
200 | 可正常访问 |
/actuator/env |
404 | 已禁用 |
/actuator/heapdump |
404 | 已禁用 |
/actuator/threaddump |
404 | 已禁用 |
✍️ 总结:
只要在配置中排除或禁用敏感端点,就能让 heapdump/env 等路径不可访问;
再配合授权机制,基本可以消除 Actuator 暴露导致的信息泄露风险。
2️⃣ Swagger 接口文档与安全要点
💡 基本概念

-
Swagger UI:自动生成的 API 文档与测试页面。
-
默认入口一般位于:
/swagger-ui.html /swagger-ui/index.html /doc.html (部分框架使用) -
开发阶段常用于:
- 展示所有 Controller 接口;
- 描述参数、返回值;
- 直接在线调试。
🎨 界面特征
- 网页上列出所有 API 路径、请求方式、说明;
- 每个接口下方都有 "Try it out" 按钮,可直接发送请求;
- 输入参数 → 点击执行 → 实时查看响应。
⚠️ 常见安全风险
| 问题 | 风险描述 |
|---|---|
| Swagger 未关闭或未鉴权 | 暴露所有接口信息(包括内部调试接口、管理接口)。 |
| 参数结构可直接枚举 | 便于攻击者批量测试接口、发现敏感接口。 |
| 可直接执行危险接口 | 攻击者可在 Swagger 页面执行敏感操作(如创建用户、删除记录)。 |
🧰 关联检测方法
-
访问常规 URL:
yamlhttp://<host>:8080/swagger-ui.html http://<host>:8080/swagger-ui/index.html http://<host>:8080/v2/api-docs -
使用
Postman:
- 导入
swagger.json或api-docs文件; - 批量调用接口做自动化检测(可验证授权、参数过滤等)。
- 导入
🧩 防护建议
-
仅在开发/测试环境启用 Swagger。
-
配置 Spring Security 或网关鉴权。
-
项目上线前:
yamlspringfox: documentation: swagger-ui: enabled: false或完全剔除相关依赖。
3️⃣ 综合理解
| 项目 | 作用 | 潜在风险 | 防护思路 |
|---|---|---|---|
| Actuator | 监控运行状态、健康检查 | 端点泄露系统信息、凭据、堆内容 | 严控暴露端点、启用鉴权 |
| Swagger | 生成、测试 API 文档 | 全接口暴露、业务泄露、越权访问 | 禁止生产使用或加认证、限制访问来源 |
🧩 关键思维收获
- 接口暴露 = 攻击面增加
- 任何调试 / 管理页面都属高敏信息
- 审计时要检查这些默认路径是否可访问
- 安全检测要结合自动化工具 + 手动验证
✅ "开发者眼中的便利,往往是攻击者眼中的入口。"
审计时从易被忽略的"默认功能"入手,常常能发现高价值的信息泄露。"
补充:
IDEA 中的模块拥有自己的 src 目录,是因为模块代表一个可独立编译的构建单元。
每个模块需要独立的源文件、资源和输出路径,IDEA 因而为它配置 src 目录结构。
Swagger 就是一个可以自动列出你所有 API 接口、说明它们参数与返回值,并让你直接在网页上点几下就能测试的智能说明书系统。
配置swagger3时,需要在propersties文件中配置
