API 文档暴露为什么要看
Swagger UI、OpenAPI 描述文件(openapi.json、swagger.json)、GraphQL 自省页面这类在线文档,等于一份接口地图:路径、方法、参数、示例与错误码一应俱全,有时还会带上内部接口与调试接口。对外可读即构成信息暴露,是否高危要看文档里接口的性质——读数据的接口与改配置的接口完全不是一个量级。核查方式是确认可访问性(匿名、需登录还是仅内网)并评估文档内容敏感度。
基本信息
| 常见路径 | swagger-ui、swagger、api-docs、openapi.json、swagger.json |
|---|---|
| 敏感内容 | 内部与调试接口、管理接口、示例凭据字段 |
| 判定口径 | 对外可匿名读取即为暴露,等级取决于接口性质 |
| 纪律 | 不按文档批量调用接口做覆盖测试 |
| 修复方向 | 文档仅内网可达,或在网关统一加认证 |
典型使用场景
- Web 信息暴露类检查的常规项,尤其针对前后端分离系统
- 评估接口清单是否泄露了未对外发布的功能与内部路径
- 为越权类问题提供线索:文档里标出的角色字段与权限参数
- 检查示例数据里是否含真实令牌或有规律的可猜测值
- 为客户提供整改建议:区分对外文档与内部文档
核查方式
核查方式
# 只做可达性判断,不按文档调用接口
for p in swagger-ui.html api-docs openapi.json swagger.json v2/api-docs; do
curl -s -o /dev/null -w "$p %{http_code}\n" https://example.com/$p
done
# 可访问时记录:访问是否需认证、文档覆盖的接口数量与分类
# 关注文档中是否出现内部域名、管理接口与示例凭据字段名
# 不批量调用文档中的接口;越权类验证按单独授权进行可达性与判断
| 可达性 | 含义 | 处置 |
|---|---|---|
| 匿名可访问且含内部接口 | 信息暴露明显 | 列缺陷并提示优先整改 |
| 需登录才可访问 | 风险取决于账号范围 | 核查是否所有账号都能看到全部接口 |
| 仅内网可达 | 暴露面有限 | 记录现状,不列为高危 |
| 路径不存在或返回统一错误页 | 未暴露 | 无需处置 |
修复视角:把文档收敛到内网或网关之后,生产与测试环境的文档分离,对外只发布明确需要公开的接口说明。
按文档逐个调用接口做「覆盖测试」偏离授权:文档只用于理解接口结构,动态验证必须限定在授权范围内并遵守限速要求。