API 扫描是什么
API 扫描的难点在于接口没有页面可爬:参数结构、鉴权方式与调用顺序都来自接口定义或人工梳理。有 OpenAPI、Swagger 或 Postman 集合时可以直接导入生成请求;没有定义时,先从网关访问日志与前端代码里提取真实调用的接口清单,再按角色逐项验证越权与参数处理。相对传统站点扫描,API 扫描更强调按角色与权限矩阵做对照,而不是单纯探测响应特征。
基本信息
| 输入材料 | OpenAPI/Swagger 定义、网关日志、前端调用代码 |
|---|---|
| 前提 | 明确测试账号与各角色的权限矩阵 |
| 常见工具 | 支持 OpenAPI 导入的扫描器,导入后限制速率执行 |
| 风险控制 | 写接口需在测试环境执行,生产只做只读核查 |
典型使用场景
- 接口定义齐全的项目,导入定义后按上下文执行被动与轻量主动检查
- 梳理影子 API:把网关清单与实际可达路径做比对,找出未登记接口
- 按角色矩阵逐项验证:用低权限凭据调用高权限接口,确认返回 403
- 检查响应字段是否超出业务需要,识别过度返回与未脱敏数据
- 旧版本接口下线后复查:确认返回 404 或 410,而不是仍可正常调用
核查维度清单
核查维度清单
1. 鉴权:无凭据 / 低权限凭据访问高权限接口
2. 参数:类型边界、数组与对象结构、批量查询上限
3. 速率:大批量请求下的限流与降级行为
4. 数据暴露:响应字段是否超出业务需要(脱敏、字段过滤)
5. 版本与文档:旧版本接口是否仍在线、文档页是否对外可见角色对照片段
| 检查项 | 方法 | 预期结果 |
|---|---|---|
| 水平越权 | 用 A 用户凭据读取 B 用户资源 ID | 返回 403 或 404,不返回他人数据 |
| 垂直越权 | 用普通用户凭据调用管理接口 | 返回 403 |
| 限量绕过 | 请求超大分页或批量参数 | 被上限截断或直接拒绝 |
| 未脱敏字段 | 对比响应与界面展示字段 | 仅返回业务必要字段 |
API 扫描要带上测试账号的鉴权头并把请求速率压到业务可承受的范围内,不带凭据的扫描只能覆盖匿名可见的接口,结论会明显偏乐观。
写操作接口要格外谨慎:生产环境的批量创建、删除、退款类接口一旦被扫描器自动调用,会产生脏数据甚至真实业务影响。