写在前面:合法学习边界
本文只讲 API 安全的测试思路,适用于自建靶场和授权测试。请不要对真实 API 进行越权、爆破、批量枚举或未授权访问。
一、API 为什么容易出问题
API 通常直接暴露业务逻辑,而且很多接口没有页面保护。
常见风险:
1
2
3
4
5
6
| 未鉴权接口
对象级越权
参数枚举
批量请求
速率没有限制
返回信息过多
|
二、API 测试的重点
1. 鉴权
确认每个接口都要求有效 token、session 或签名。
2. 授权
即使有 token,也要检查角色和资源归属。
3. 输入校验
检查分页、排序、过滤参数是否会被滥用。
4. 速率限制
防止爆破、爬取和批量拉取。
5. 错误信息
不要暴露堆栈、内部字段名或敏感结构。
三、常见测试点
1
2
3
4
5
| GET /api/user/{id}
POST /api/login
PATCH /api/user/{id}
DELETE /api/order/{id}
GET /api/export
|
需要检查:
1
2
3
4
5
| 是否能未登录访问
是否能改 ID 访问别人数据
是否返回了不必要字段
是否支持批量查询
是否有速率限制
|
影响与危害
API 安全问题能造成:
1
2
3
4
| 越权、注入、数据泄露
未授权访问
批量数据被爬取
业务逻辑被滥用
|
风险等级:中到高。
四、防御建议
1
2
3
4
5
6
| 所有接口都要服务端鉴权
对象级授权必须检查归属
限制请求频率
最小化返回字段
记录审计日志
使用 HTTPS 和签名
|
修复
1
2
3
4
5
| 统一鉴权与授权、对象级访问控制
参数化查询与输入校验
接口限流与防刷
敏感接口审计与日志
修复后复测关键测试点
|
五、报告写法
示例:
1
2
3
| 发现:/api/orders/{id} 未校验订单归属,低权限用户可读取他人订单详情。
风险:可能导致订单、支付和联系人信息泄露。
建议:增加对象归属校验;减少返回字段;增加访问日志和告警。
|
六、小结
API 安全的关键是:鉴权、授权、输入、速率、日志,五件事都要做。