首页/安全/漏洞与攻击面速查/Swagger/OpenAPI 文档暴露
Web 漏洞原理与防护55 条

Swagger/OpenAPI 文档暴露

接口文档(Swagger UI、api-docs 路径)在生产环境公开会暴露全部接口、参数与内部字段;应改为内网访问、增加鉴权或按环境关闭。

漏洞与攻击面速查安全更新于 2026-10-13

接口文档为什么会成为问题

Swagger UI 与 OpenAPI 描述文件在生产环境公开,等于把接口清单、参数结构、内部字段命名一并交出去:攻击者不必猜路径,可以按文档直接构造请求。这类暴露很少单独导致入侵,但它显著降低攻击成本,也常把内部管理接口一起暴露。处置不是一律删除,而是按环境区分:生产关闭,或改为内网访问加鉴权。

基本信息

常见路径/swagger-ui.html、/swagger-ui/index.html、/v2/api-docs、/v3/api-docs、/openapi.json、/docs
直接后果接口枚举、参数结构泄露、内部字段与示例数据泄露
间接风险隐藏的管理接口与调试端点被一并发现
风险定级中,取决于文档中是否含未授权或高危接口
处置方式生产关闭、内网访问、加鉴权、清理示例中的真实数据
检查时机上线前自查、季度暴露面巡检、接口变更后复核

常见路径与判断

路径说明期望结果
/swagger-ui/index.htmlUI 页面入口公网返回 404 或跳转登录
/v3/api-docsOpenAPI 描述文件需鉴权或仅内网可访问
/v2/api-docs旧版 springfox 描述老项目常遗留,需单独核查
/openapi.json新框架默认描述文件与 api-docs 同等对待
/docs部分框架默认文档路径返回 404 或鉴权拦截
/actuator/mappings端点映射列表生产应受限访问

常见路径自查

常见路径自查
# 逐一请求,确认是否需要鉴权、是否可从公网访问
for p in /swagger-ui/index.html /v3/api-docs /v2/api-docs /openapi.json /docs /actuator/mappings; do
  code=$(curl -s -o /dev/null -w '%{http_code}' "https://example.com$p")
  echo "$p -> $code"   # 期望 401/403/404,返回 200 需人工确认内容
done

Spring 环境关闭示例

Spring 环境关闭示例
# application-prod.properties
springdoc.api-docs.enabled=false
springdoc.swagger-ui.enabled=false
# 旧版 springfox:springfox.documentation.enabled=false
# 若必须保留:加访问控制,仅内网网段或鉴权后才可访问
# 关闭后重启生效,并复核网关是否还有缓存或独立映射

典型使用场景

  • 新服务上线前的暴露面自查项
  • 季度巡检中对文档路径的批量扫描
  • 渗透测试报告里接口信息泄露类问题的整改
  • 内部系统改为公网可访问时的复核
  • 接口重构后确认旧文档路径已下线
  • 安全左移:把文档检查写进上线清单
文档是开发提效工具,不必一刀切关闭。用内网域名加鉴权保留可用性,比让所有人都不方便更可持续,也更容易被团队接受并长期执行。
文档里常带真实测试数据、内部字段命名与内网地址,扫描器恰恰靠这些构造请求。暴露的收益远超「只是看看接口」。

易错点

  • 把文档改到随机路径当作防护:路径可从前端代码与网络记录中还原,本质仍是公开
  • 只在网关注入拦截,服务端口直接暴露,绕过网关即可访问文档
  • 关闭了 UI 却没关 api-docs 接口,JSON 描述文件仍然可下载
  • 文档中残留真实账号、内外网地址等示例数据,泄露面超出接口本身
  • 老框架升级后默认路径变化,以为已关闭,实际旧路径依旧可达

数据来源与参考

  • springdoc-openapi 官方文档
  • OWASP API Security Top 10(API 资产无序管理)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌