Spring Boot应用生成可公开访问env.json的原因及访问限制方案
生成机制
你看到的env.json是Spring Boot官方监控组件Actuator的env端点返回的响应内容。只要项目中引入了spring-boot-starter-actuator依赖,默认就会自动注册一系列用于应用监控、管理的内置端点,env是其中用来返回应用全部环境配置的端点,你给出的返回结构就是该端点的标准返回格式,包含了所有加载到Spring运行环境中的配置源内容,包括application.properties定义的配置、系统环境变量、JVM属性、服务端口等敏感数据。如果开发者没有对端点的暴露做限制,该接口就会默认对外公开可访问,产生敏感信息泄露的安全风险。
限制公开访问的方案
- 关闭不必要的敏感端点
在application.properties中配置关闭默认全部端点,只单独开启业务需要的端点,示例配置如下:
如业务确实需要使用# 关闭所有端点默认开启的规则 management.endpoints.enabled-by-default=false # 仅开启健康检查端点 management.endpoint.health.enabled=trueenv端点,再单独配置management.endpoint.env.enabled=true开启,避免不必要的端点暴露。 - 从web访问列表中排除敏感端点
就算开启了部分敏感端点供内部使用,也可以配置不对外通过web路径暴露,示例配置:# 从web暴露列表中排除env、beans等高危敏感端点 management.endpoints.web.exposure.exclude=env,beans,configprops - 给端点添加访问权限控制
整合Spring Security等权限框架,给所有Actuator端点配置访问权限,仅允许管理员角色的用户访问敏感接口,示例配置:# 配置Actuator端点仅允许ADMIN角色访问 management.endpoints.web.access.role=ADMIN - 敏感值自动脱敏
若确实需要对外暴露env端点的部分信息,可以配置关闭明文展示敏感配置:# 永远不返回配置的明文值 management.endpoint.env.show-values=NEVER - 网络层面拦截
在网关、WAF或防火墙层配置规则,拦截所有对公网开放的Actuator相关路径请求,仅允许内网指定IP段访问这类管理接口。
内容的提问来源于stack exchange,提问作者Wicky Memon
相关产品推荐
相关产品推荐

