Spring Boot Actuator 暴露 heapdump,内存里的密码可能全漏了
Spring Boot Actuator 暴露 heapdump内存里的密码可能全漏了线上开了 Actuator本来是为了方便排查问题。结果/actuator/heapdump也暴露出去了。一份堆转储文件下载下来数据库连接串、Redis 密码、Token、用户请求参数都可能躺在里面。一、事故现场有个项目为了方便线上排查开了 Spring Boot Actuator。配置大概是这样management:endpoints:web:exposure:include:*开发同学当时的想法很简单先全部打开线上排查方便一点。结果某天安全扫描扫出来/actuator/env /actuator/metrics /actuator/heapdump /actuator/threaddump这些端点都能访问。其中最危险的是/actuator/heapdump这个接口会导出 JVM 当前堆内存快照。换句话说JVM 里活着的对象它都可能出现在 heapdump 里。这就不是“暴露一点监控信息”的问题了。这是把应用内存打包交出去了。二、heapdump 里到底有什么很多人低估了 heapdump 的敏感程度。它不是普通日志。它是 JVM 堆内存快照。里面可能包含配置对象 数据库连接信息 Redis 连接信息 MQ 连接信息 第三方 API Token JWT / Session / Cookie 用户请求参数 接口返回数据 缓存对象 业务实体 异常堆栈 临时字符串比如项目里有这种配置spring:datasource:url:jdbc:mysql://10.0.0.12:3306/order_dbusername:order_userpassword:Abc123456redis:host:10.0.0.20password:redis-secret这些配置在应用启动后通常会被绑定成 Java 对象。只要对象还在堆里就有可能出现在 heapdump 文件中。再比如请求里带了 TokenAuthorization: Bearer eyJhbGciOiJIUzI1NiJ9...或者用户刚提交过敏感参数{mobile:13800000000,idCard:xxx,password:xxx}这些字符串如果还没被 GC也可能在堆快照里被找到。所以 heapdump 暴露的风险不是“看一下内存占用”。而是把应用运行时的敏感数据一起暴露了。三、为什么很多项目会误开最常见的是这行配置management:endpoints:web:exposure:include:*这表示暴露所有 Web 端点。开发环境这么配问题不大。但如果生产也这么配就危险了。还有一种写法management:endpoints:web:exposure:include:health,info,metrics,env,heapdump,threaddump看起来比*收敛了一点。但heapdump、env、threaddump仍然是高风险端点。尤其是这些端点风险/actuator/heapdump导出 JVM 堆内存可能包含密码、Token、用户数据/actuator/env暴露环境变量、配置项和配置来源旧版本或配置不当时可能泄露敏感值/actuator/configprops暴露配置绑定对象旧版本或配置不当时可能泄露敏感值/actuator/threaddump暴露线程栈、类名、方法名、业务路径/actuator/logfile暴露日志内容/actuator/mappings暴露接口路由这些东西对开发排查很方便。对攻击者也很方便。这里要补一个版本细节。较新的 Spring Boot 对/actuator/env、/actuator/configprops这类端点默认会做敏感值脱敏很多密码字段不会直接明文展示。但这不代表它们就可以放心暴露。因为它们仍然会暴露配置结构、属性名、配置来源、组件信息和内部实现细节。如果项目使用旧版本、改过脱敏规则或者把show-values配成了always敏感值仍然可能被打出来。而/actuator/heapdump的风险更直接。它导出的是堆内存快照不是经过脱敏处理的配置视图。四、Actuator 默认不是原罪乱暴露才是Actuator 本身不是问题。它是非常好用的生产诊断工具。问题在于暴露范围太大 没有鉴权 直接挂公网 生产和开发共用一套配置安全的做法不是“永远不用 Actuator”。而是生产环境只开放必要端点。比如最小配置management:endpoints:web:exposure:include:health,info如果接入 Prometheusmanagement:endpoints:web:exposure:include:health,info,prometheus不要为了省事写include:*这行配置在生产环境里非常刺眼。五、生产环境应该怎么配1. 只暴露必要端点推荐management:endpoints:web:exposure:include:health,info,prometheus不推荐management:endpoints:web:exposure:include:*如果没有监控采集需求甚至可以只留management:endpoints:web:exposure:include:health2. health 不要暴露过多细节很多项目会开management:endpoint:health:show-details:always这会把很多健康检查细节暴露出去。生产环境更建议management:endpoint:health:show-details:never或者只对已认证用户展示management:endpoint:health:show-details:when_authorized3. 管理端口和业务端口分开可以把 Actuator 放到单独端口management:server:port:9090然后通过安全组、内网、防火墙限制访问。比如业务端口 8080对外开放 管理端口 9090只允许内网监控系统访问这样即使业务接口暴露公网管理端点也不会跟着裸奔。4. 加鉴权如果管理端点必须通过 HTTP 访问至少要加鉴权。比如只允许管理员角色访问ConfigurationpublicclassActuatorSecurityConfig{BeanSecurityFilterChainactuatorSecurityFilterChain(HttpSecurityhttp)throwsException{http.securityMatcher(EndpointRequest.toAnyEndpoint()).authorizeHttpRequests(auth-auth.requestMatchers(EndpointRequest.to(health,info)).permitAll().anyRequest().hasRole(ACTUATOR_ADMIN)).httpBasic(Customizer.withDefaults());returnhttp.build();}}具体写法会随 Spring Security 版本变化但原则不变非公开端点必须鉴权。5. 明确关闭高危端点如果不需要 heapdump可以显式关掉management:endpoint:heapdump:enabled:false也可以关闭其他高危端点management:endpoint:env:enabled:falseconfigprops:enabled:falsethreaddump:enabled:falselogfile:enabled:false注意端点“启用”和“暴露”是两回事。一个端点可能在应用内部启用了但没有通过 Web 暴露。在较新的 Spring Boot 版本里还可以额外通过端点访问级别控制某个端点是不可访问、只读还是允许完整访问。不同版本的配置项名字会有差异落地时要按自己项目的 Spring Boot 版本确认。生产环境要同时关注enabled exposure access network access authentication如果确实需要临时开放env或configprops给内网排查至少不要在生产环境使用management:endpoint:env:show-values:alwaysconfigprops:show-values:always更稳的做法是保持敏感值不展示或者只对已认证、已授权的用户展示。六、已经暴露过 heapdump怎么办如果你发现生产环境曾经暴露过/actuator/heapdump不要只把配置改掉就结束。建议按事故处理。1. 立即下线暴露端点先改配置management:endpoints:web:exposure:include:health,info,prometheusendpoint:heapdump:enabled:false同时确认网关、Nginx、安全组没有继续放行。2. 检查访问日志查这些路径有没有被访问过/actuator /actuator/heapdump /actuator/env /actuator/configprops /actuator/threaddump /actuator/logfile重点看访问 IP 访问时间 响应状态码 响应大小 是否有异常下载流量如果/actuator/heapdump返回过大文件就要高度警惕。3. 轮换密钥和密码heapdump 里可能出现这些敏感信息数据库密码 Redis 密码 MQ 密码 对象存储密钥 第三方 API Token JWT 签名密钥 内部服务调用凭证如果确认有外部访问建议轮换相关凭证。不要赌“没人会分析那个文件”。4. 检查异常登录和异常调用如果数据库、Redis、对象存储、第三方平台有审计日志要一起看。重点看陌生 IP 登录 异常时间段访问 大量读取 失败重试 权限变更 新增账号Actuator 泄露本身只是入口。真正的损失可能发生在后面。七、团队规范生产 Actuator 最小化如果让我给团队定一条规范我会这样写生产环境禁止 exposure.include* 生产环境默认只开放 health、info、prometheus heapdump、threaddump、logfile 不允许公网访问 env、configprops 不允许公网访问确需内网开放时也不要展示敏感值 管理端口必须走内网或鉴权 所有 Actuator 配置必须区分 dev/test/prod配置可以分环境。开发环境# application-dev.ymlmanagement:endpoints:web:exposure:include:*endpoint:health:show-details:always生产环境# application-prod.ymlmanagement:endpoints:web:exposure:include:health,info,prometheusendpoint:health:show-details:neverheapdump:enabled:falseenv:enabled:falseconfigprops:enabled:falsethreaddump:enabled:falselogfile:enabled:false这才是比较稳的方式。不要让开发配置跟着一起上生产。八、上线前 checklist上线前看到 Actuator建议过一遍这个表。检查项风险建议是否配置include: *所有端点暴露生产禁止是否暴露heapdump堆内存泄露关闭或仅内网鉴权是否暴露env配置结构、环境变量和敏感值泄露风险关闭确需开放时鉴权并避免show-values: always是否暴露configprops配置对象和敏感值泄露风险关闭确需开放时鉴权并避免show-values: always是否暴露logfile日志敏感信息泄露关闭管理端口是否公网可访问被扫描命中内网隔离health 是否展示详情泄露组件信息prod 用neverdev/prod 配置是否隔离开发配置上生产分环境配置是否有访问日志暴露后难追踪网关/Nginx 留日志九、总结Actuator 是好工具。但生产环境里它不是给所有人看的。尤其是/actuator/heapdump。它导出的不是普通监控数据而是 JVM 堆内存快照。里面可能有密码 Token 连接串 用户数据 业务对象 请求参数所以生产环境记住三句话不要include: *。不要把管理端点挂公网。不要无鉴权暴露 heapdump、env、configprops、logfile 这类高危端点。下一篇准备写Async 默认执行器又炸了SimpleAsyncTaskExecutor 为什么不是线程池。如果你也在排查 Java 后端线上问题可以关注公众号云技纵横。这个系列会持续更新 Spring 事务、线程池、JVM、MySQL、Redis、MQ 的真实踩坑复现。

相关新闻

Apache Skywalking 实战 阅读笔记 第二章

Apache Skywalking 实战 阅读笔记 第二章

Apache Skywalking 实战 阅读笔记 第二章 一、参考资料 二、笔记总结 第2章 SkyWalking安装与配置 本章主要介绍SkyWalking的项目编译和工程结构,以及JavaAgent模块、后端模块、UI模块的部署和配置信息。通过本章的学习,读者可以部署一个简单的SkyWa…

2026/7/6 13:31:26阅读更多 →
单片机:串行接口之通信概念

单片机:串行接口之通信概念

通信概念1. 引言2. 并行通信与串行通信2.1 并行通信2.2 串行通信3. 串行通信制式3.1 单工通信3.2 半双工通信3.3 全双工通信4.串行通信数据传输原理4.1 发送过程4.2 接收过程5. 异步通信与同步通信5.1 串行异步通信方式5.2 串行同步通信方式6. 串行通信的校验方法6.1 奇偶校验&…

2026/7/6 13:31:26阅读更多 →
机器学习项目的完整流程:从原始数据到模型预测

机器学习项目的完整流程:从原始数据到模型预测

学完 AI、机器学习、训练集、指标和过拟合之后,下一步要把这些概念放进一个完整项目里。 很多初学者一上来就问:模型用什么?参数怎么调?准确率为什么不高?但真正做项目时,模型只是中间一环。一个项目能不能…

2026/7/6 13:31:26阅读更多 →
YOLO11-Pose 全栈拆解|OpenPose自底向上PAF热力图、YOLO端到端OKS损失、多场景姿态落地、完整训练推理工程复现

YOLO11-Pose 全栈拆解|OpenPose自底向上PAF热力图、YOLO端到端OKS损失、多场景姿态落地、完整训练推理工程复现

目录 0. 摘要 1. 姿态估计核心认知与行业技术痛点 1.1 视觉任务层级对比:从看见物体到看懂动作 1.2 姿态估计四大核心技术难点 1.3 COCO数据集标准关键点体系 2. 两大主流姿态估计算法全维度拆解 2.1 自底向上流派:OpenPose核心原理(暴力美学架构) 2.1.1 整体网络架…

2026/7/6 14:36:32阅读更多 →
远程办公团队共用 GPT5.5 接口方案

远程办公团队共用 GPT5.5 接口方案

远程办公团队共用 GPT5.5 接口方案远程团队接入 GPT5.5 接口,最容易出问题的不是代码调用,而是“谁在用、用了多少、出错后怎么查”。如果只是把一个 Key 扔到群里,前几天看着省事,后面基本会遇到额度被打满、成员误用生产 Key、日…

2026/7/6 14:36:32阅读更多 →
IX6024 PCIe2.0 @ACP#24通道工业级交换芯片|老旧工控升级与海量边缘IoT时序数据扩容核心(对标ASM1824)

IX6024 PCIe2.0 @ACP#24通道工业级交换芯片|老旧工控升级与海量边缘IoT时序数据扩容核心(对标ASM1824)

一、行业前言:存量工控国产化替换浪潮来袭,PCIe2.0高可靠扩容成为下沉市场刚需2026年国内物理AI与工业智能化产业形成「高端PCIe4.0、中端PCIe3.0、存量工控PCIe2.0」三级并存的完整生态格局。在高端算力集群、中端工作站完成技术迭代的同时,…

2026/7/6 14:36:32阅读更多 →
GSV9001S@普及型4K视频处理芯片|轻量化物理AI可视化普惠落地核心(普及型工控/教育/边缘终端专用)

GSV9001S@普及型4K视频处理芯片|轻量化物理AI可视化普惠落地核心(普及型工控/教育/边缘终端专用)

一、行业前言:物理AI可视化全面下沉,高性价比视频处理成为普惠设备刚需2026年物理AI产业正式进入全场景可视化落地时代,区别于高端超算集群的极致算力渲染、多屏8K超清输出需求,占据市场80%以上增量的中端普惠设备,核心…

2026/7/6 14:36:32阅读更多 →
纺织行业HMI:化纤纺丝的张力控制与卷绕界面

纺织行业HMI:化纤纺丝的张力控制与卷绕界面

化纤纺丝,是让聚合物熔体或溶液从喷丝板中“吐丝成线”的精密过程。丝条的张力是贯穿始终的生命线:张力不稳,会导致断丝、毛丝、条干不匀,最终影响丝饼的成型质量。这里的HMI,是维持数百个纺丝位 “齐步走” 的 “交响…

2026/7/6 14:36:32阅读更多 →
聚簇索引回表与覆盖索引

聚簇索引回表与覆盖索引

一句话InnoDB 的表本身就是一棵以主键为 key 的 ​B 树(聚簇索引)​。普通索引的叶子节点存的是主键值,查数据时需要​回表​。覆盖索引让查询不回表,是性能优化的核心手段。聚簇索引(Clustered Index) 什么…

2026/7/6 14:31:32阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/6 4:26:20阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/6 2:48:33阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 技术架构先行:官方接口的合规应用 你是否曾在BP阶段手忙脚乱&#x…

2026/7/6 0:03:39阅读更多 →
多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_m…

2026/7/6 0:03:39阅读更多 →
COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南在数据分析和处理领域,去重统计是最基础也是最频繁使用的操作之一。当数据量达到亿级规模时,不同的去重统计方法在性能上可能产生天壤之别。本文将基于 5 亿行数据的实…

2026/7/6 0:03:39阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/6 4:45:01阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/6 4:45:01阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/6 4:45:03阅读更多 →