Spring Boot 未授权访问漏洞排查与修复指南

本文将带你完整了解 Spring Boot 未授权访问漏洞的原理、排查方法、分场景修复方案,以及 Jar 包部署的专项加固步骤,适合生产环境快速落地安全整改。


一、什么是 Spring Boot 未授权访问漏洞?

Spring Boot 未授权访问漏洞,是指攻击者无需任何身份验证,即可直接访问应用的敏感接口、监控端点或管理功能,从而获取服务器信息、篡改数据甚至接管服务器权限的高危安全风险。

常见风险场景

  1. Actuator 端点暴露 :Spring Boot 默认的监控端点(如/actuator/env/actuator/shutdown)未加保护,可直接被访问,泄露环境变量、配置信息,甚至执行关闭服务器等危险操作。
  2. 业务接口权限缺失:业务代码未配置权限控制,任何人都能直接调用增删改查接口,导致数据泄露或被篡改。
  3. 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:修改配置文件

  1. 解压 Jar 包中的配置文件:bash运行# 进入Jar包所在目录 cd /htdocs/java-project/shuixian-website/ # 解压配置文件 unzip -q shuixian-website.jar BOOT-INF/classes/application-prod.yml
  2. 编辑配置文件,添加安全加固配置: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

六、修复后验证与日常维护

  1. 功能验证:重启应用后,测试所有业务接口是否正常访问,避免配置修改影响业务功能。
  2. 漏洞复测:再次使用之前的测试命令或扫描工具,确认未授权访问风险已消除。
  3. 定期更新:及时升级 Spring Boot 和相关依赖版本,修复已知安全漏洞。
  4. 权限最小化:避免使用 root 用户运行应用,限制配置文件和日志文件的访问权限,防止敏感信息泄露。

结语

Spring Boot 未授权访问漏洞属于高风险安全问题,一旦被利用,可能导致服务器被入侵、数据泄露等严重后果。通过本文的排查方法和修复方案,可快速完成漏洞整改,同时配合 Nginx 反向代理、IP 白名单等措施,构建多层安全防护,保障应用安全稳定运行。

本文首发个人博客"https://www.lnmpweb.cn/archives/7529

相关推荐
Java开发的小李1 小时前
SpringBoot 高流量高并发 基础全面讲解
java·spring boot·后端·性能优化
Kqwert1 小时前
C# PDF转图片工具类 - 基于Docnet和SkiaSharp的实现
后端
随风,奔跑1 小时前
Spring Cloud Alibaba(六)-链路追踪SkyWalking
java·后端·spring·skywalking
铁皮饭盒1 小时前
成为AI全栈 - 第1课:后端到底是干嘛的?一张图拆解登录
前端·后端·ai编程
wuminyu1 小时前
专家视角看Lambda表达式的原理解析
java·linux·c语言·jvm·c++
wangbing11251 小时前
Java处理csv文件总是丢数据
java·开发语言·python
Flynt1 小时前
LangGraph 生产环境跑了三个月,我的真实感受
后端
Rust语言中文社区1 小时前
【Rust日报】2026-04-28 Pacquet:pnpm 的 Rust 重写版本
开发语言·后端·rust
云烟成雨TD1 小时前
Spring AI 1.x 系列【30】向量数据库:核心 API 和入门案例
java·人工智能·spring