本文将带你完整了解 Spring Boot 未授权访问漏洞的原理、排查方法、分场景修复方案,以及 Jar 包部署的专项加固步骤,适合生产环境快速落地安全整改。
一、什么是 Spring Boot 未授权访问漏洞?
Spring Boot 未授权访问漏洞,是指攻击者无需任何身份验证,即可直接访问应用的敏感接口、监控端点或管理功能,从而获取服务器信息、篡改数据甚至接管服务器权限的高危安全风险。
常见风险场景
- Actuator 端点暴露 :Spring Boot 默认的监控端点(如
/actuator/env、/actuator/shutdown)未加保护,可直接被访问,泄露环境变量、配置信息,甚至执行关闭服务器等危险操作。 - 业务接口权限缺失:业务代码未配置权限控制,任何人都能直接调用增删改查接口,导致数据泄露或被篡改。
- API 文档泄露:Swagger、Knife4j 等接口文档未加限制,攻击者可通过文档快速定位所有可利用接口。
二、如何排查 Spring Boot 未授权访问漏洞?
方法 1:本地快速测试(推荐)
在服务器上直接测试应用端口和敏感路径,无需暴露公网:
# 1. 查看Spring Boot应用的运行端口
netstat -tulpn | grep java
# 2. 测试默认Actuator端点(替换为你的应用端口)
curl http://127.0.0.1:你的端口/actuator
curl http://127.0.0.1:你的端口/actuator/env
curl http://127.0.0.1:你的端口/actuator/shutdown
# 3. 测试业务接口和API文档
curl http://127.0.0.1:你的端口/swagger-ui.html
curl http://127.0.0.1:你的端口/doc.html
如果返回数据而非 401/403/404 状态码,说明存在未授权访问风险。
方法 2:公网漏洞扫描
使用 Nessus、AWVS 或开源工具(如 Xray)对服务器端口进行扫描,重点检测 Spring Boot 默认端点、Swagger 路径、Actuator 监控地址,扫描结果中会明确标记未授权访问的风险点。
方法 3:检查应用配置文件
解压 Jar 包,查看配置文件是否存在安全隐患:
# 解压Jar包中的配置文件
unzip -q your-application.jar BOOT-INF/classes/application*.yml
# 查看配置内容,重点检查以下配置
cat BOOT-INF/classes/application-prod.yml
需重点关注:
management.endpoints相关配置,是否暴露了过多端点spring.security相关配置,是否启用了身份验证- 是否配置了敏感路径的白名单放行规则
三、通用修复方案(所有场景适用)
方案 1:关闭 / 加固 Actuator 端点
在application-prod.yml中添加以下配置,禁用危险端点并限制暴露范围:
yaml
# 彻底禁用所有监控端点(最安全)
management:
endpoints:
web:
exposure:
include: "none"
endpoint:
shutdown:
enabled: false # 禁用关闭服务器的危险端点
health:
enabled: false # 禁用健康检查端点(如无监控需求)
# 如需保留监控,仅开放必要端点并修改默认路径
management:
endpoints:
web:
exposure:
include: health,info # 仅保留基础健康检查
base-path: /hidden-monitor-xxx # 修改默认路径,避免被扫描识别
endpoint:
health:
show-details: never # 不显示敏感健康详情
方案 2:启用 Spring Security 身份验证
在配置文件中开启基础认证,给所有接口加上登录验证:
yaml
spring:
security:
user:
name: admin # 自定义用户名
password: ${random.uuid} # 启动时自动生成随机密码,避免硬编码泄露
重启应用后,访问任何接口都会弹出登录框,需输入正确的账号密码才能访问。
方案 3:限制 API 文档访问
- 生产环境直接禁用 Swagger/Knife4j,仅在开发 / 测试环境启用。
- 若必须启用,添加 IP 白名单或 Nginx 反向代理限制,仅允许内网 IP 访问文档地址。
四、Jar 包部署场景专项修复指南
步骤 1:修改配置文件
- 解压 Jar 包中的配置文件:bash运行
# 进入Jar包所在目录 cd /htdocs/java-project/shuixian-website/ # 解压配置文件 unzip -q shuixian-website.jar BOOT-INF/classes/application-prod.yml - 编辑配置文件,添加安全加固配置:bash运行
vim BOOT-INF/classes/application-prod.yml追加之前的安全配置,保存退出。
步骤 2:重新打包 Jar 包
# 将修改后的配置文件重新打包进Jar包
zip -q shuixian-website.jar BOOT-INF/classes/application-prod.yml
# 清理临时文件
rm -rf BOOT-INF
步骤 3:重启应用并验证
# 重启应用(使用你的项目重启脚本)
./shuixian-website-restart.sh
# 验证修复效果
curl http://127.0.0.1:10005/actuator/env
若返回 401/403/404 状态码,说明修复生效。
额外加固:生产环境禁用热部署
编辑app-config.yml,关闭生产环境热部署功能,避免被利用执行恶意代码:
yaml
spring:
devtools:
restart:
enabled: false # 生产环境必须关闭
五、高级防护:Nginx 反向代理 + IP 白名单
通过 Nginx 对 Spring Boot 应用进行反向代理,增加一层访问控制,进一步降低风险:
server {
listen 80;
server_name your-domain.com;
# 限制敏感路径访问,仅允许内网IP访问
location ~ ^/hidden-monitor-xxx {
allow 127.0.0.1;
deny all;
}
# 反向代理Spring Boot应用
location / {
proxy_pass http://127.0.0.1:10005;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
重载 Nginx 配置生效:
nginx -s reload
六、修复后验证与日常维护
- 功能验证:重启应用后,测试所有业务接口是否正常访问,避免配置修改影响业务功能。
- 漏洞复测:再次使用之前的测试命令或扫描工具,确认未授权访问风险已消除。
- 定期更新:及时升级 Spring Boot 和相关依赖版本,修复已知安全漏洞。
- 权限最小化:避免使用 root 用户运行应用,限制配置文件和日志文件的访问权限,防止敏感信息泄露。
结语
Spring Boot 未授权访问漏洞属于高风险安全问题,一旦被利用,可能导致服务器被入侵、数据泄露等严重后果。通过本文的排查方法和修复方案,可快速完成漏洞整改,同时配合 Nginx 反向代理、IP 白名单等措施,构建多层安全防护,保障应用安全稳定运行。
本文首发个人博客"https://www.lnmpweb.cn/archives/7529