前后端分离、微服务架构流行后,API越来越多,API安全问题也越来越突出。OWASP专门出了API Security Top 10,说明API安全已经成了重灾区。今天把API安全的所有知识全讲清楚!
1. 为什么API安全这么重要?
参考文章里提到"网络渗透中,攻下一个点后,只是一个开始"。API就是攻击者最喜欢的"点"——接口暴露在公网,权限控制不严,数据泄露的重灾区。
1.1 API安全事件频发
- 某社交平台API泄露5亿用户数据
- 某出行平台API未授权访问泄露用户行程
- 某电商平台API越权导致大量订单信息泄露
- 某银行API存在注入漏洞
统计数据:
① 90%以上的Web应用都有API接口
② API攻击是增长最快的攻击类型
③ API漏洞平均修复时间比传统Web漏洞长
④ 越权类漏洞在API中最常见
1.2 API vs 传统Web安全
| 维度 | 传统Web安全 | API安全 |
|---|---|---|
| 交互方式 | 浏览器+HTML | 客户端+JSON/XML |
| 攻击面 | 页面+表单 | 接口+参数 |
| 认证方式 | Session/Cookie | Token/API Key |
| 常见漏洞 | XSS、CSRF | 越权、注入、信息泄露 |
| 防护手段 | WAF | API网关+身份认证 |
2. OWASP API Security Top 10
OWASP在2023年发布了API安全Top 10:
| 排名 | 漏洞名称 | 说明 |
|---|---|---|
| API1 | 失效的对象级别授权(BOLA) | 越权访问他人数据 |
| API2 | 失效的用户身份认证 | 认证机制被绕过 |
| API3 | 失效的对象属性级别授权 | 越权修改数据字段 |
| API4 | 不受限制的资源消耗 | DoS攻击、资源耗尽 |
| API5 | 失效的功能级别授权(BFLA) | 越权执行管理功能 |
| API6 | 批量分配 | 批量赋值导致越权 |
| API7 | 安全配置错误 | 配置不当导致漏洞 |
| API8 | 2023已移除 | —— |
| API9 | 库存资产管理不当 | 废弃API未下线 |
| API10 | 不安全的API使用方式 | 第三方API漏洞 |
下面重点讲最常见的几个。
3. API1:失效的对象级别授权(BOLA)
这是API最常见、最危险的漏洞,没有之一。
3.1 什么是BOLA?
正常请求:GET /api/user/123 → 返回用户123的信息 攻击请求:GET /api/user/124 → 居然也能返回用户124的信息!就是把请求里的ID改成别人的,就能看到别人的数据。这种漏洞在API里太常见了。
3.2 为什么容易出现?
① 开发者认为"用户不知道ID就访问不了"
② 只验证了登录状态,没验证数据归属
③ ORM框架直接返回对象,没做权限过滤
④ 接口复用,前端加了限制后端没加
3.3 常见场景
| 场景 | 示例 |
|---|---|
| 查看他人订单 | /api/order/别人的订单ID |
| 查看他人资料 | /api/user/别人的用户ID |
| 下载他人文件 | /api/file/别人的文件ID |
| 修改他人信息 | PUT /api/user/别人的ID |
3.4 怎么防御?
①每个接口都要做数据归属校验
- 不能只校验登录态,必须校验"这条数据是不是你的"
- 在DAO层统一做权限过滤,不要每个接口单独写
②使用不可预测的ID
- 不用自增ID,用UUID或雪花ID
- 增加枚举ID的难度
③接口最小化返回
- 只返回前端需要的字段
- 不要把整个对象都返回
4. API2:失效的用户身份认证
4.1 常见问题
①弱Token机制
- Token太简单,容易被猜测
- Token不失效,被盗用了一直能用
- Token存在URL里,容易泄露
②认证绕过
- 不加Token也能访问
- 随便填个Token就能通过
- 修改请求头就能绕过认证
③暴力破解
- 登录接口没有频率限制
- 验证码可以绕过
4.2 怎么防御?
①使用标准的认证机制
- JWT/OAuth 2.0等标准协议
- 不要自己发明认证机制
②Token安全
- 设置合理的过期时间
- 使用Refresh Token机制
- Token放在Header里,不要放URL
- 支持Token吊销
③防暴力破解
- 登录接口加频率限制
- 加验证码
- 账号锁定机制
5. API5:失效的功能级别授权(BFLA)
5.1 什么是BFLA?
跟BOLA不同,BOLA是越权看数据,BFLA是越权做事情。
普通用户请求:DELETE /api/user/123 正常应该返回:403 Forbidden(只有管理员才能删用户) 实际返回:200 OK(普通用户居然也能删用户!)就是普通用户可以执行管理员才能执行的功能。
5.2 常见场景
① 普通用户可以删除任意内容
② 普通用户可以修改系统配置
③ 普通用户可以查看管理后台接口
④ 普通用户可以提升自己的权限
5.3 怎么防御?
①基于角色的访问控制(RBAC)
- 每个接口明确需要什么角色
- 统一拦截校验,不要每个接口自己判断
②最小权限原则
- 默认拒绝,按需开放
- 普通用户默认没有任何管理权限
③接口权限矩阵
- 列出所有接口和对应权限
- 定期审查权限配置
6. API3:失效的对象属性级别授权
6.1 什么意思?
用户可以修改自己不该修改的字段。
正常请求: PUT /api/user/123 {"nickname": "新昵称"} 攻击请求: PUT /api/user/123 {"nickname": "新昵称", "role": "admin"} 结果:用户把自己改成管理员了!6.2 为什么会出现?
后端直接把前端传过来的JSON对象存到数据库里,没校验哪些字段能改哪些不能改。这就是"批量赋值"漏洞。
6.3 怎么防御?
①DTO(数据传输对象)模式
- 接口只接收允许修改的字段
- 不能直接用数据库实体类接收参数
②显式指定可更新字段
- 更新操作只更新指定字段
- 不要全量更新
③输入校验
- 校验每个字段的合法性
- 敏感字段(如role、balance)禁止用户修改
7. API安全防护措施
7.1 技术防护
①API网关
- 统一入口,统一认证
- 限流、熔断、降级
- 日志和监控
②认证授权
- OAuth 2.0 / JWT
- RBAC权限控制
- 数据级权限校验
③输入校验
- 参数合法性校验
- SQL注入/XSS防护
- 频率限制
④数据保护
- 敏感数据加密传输
- 敏感数据脱敏返回
- 最小化数据返回
⑤安全监控
- API访问日志
- 异常访问检测
- 告警机制
7.2 开发规范
①API设计规范
- RESTful API设计规范
- 统一的错误码和返回格式
- 版本化管理
②安全开发流程
- 安全需求评审
- 安全代码审计
- 安全测试
- 上线前安全检查
③文档管理
- API文档及时更新
- 废弃API及时下线
- 接口权限矩阵维护
8. API安全测试方法
8.1 越权测试
①水平越权测试
- 用A用户的Token访问B用户的数据
- 看能不能访问到
②垂直越权测试
- 用普通用户Token访问管理员接口
- 看能不能执行
③参数篡改测试
- 修改返回结果中的敏感字段
- 看后端会不会接受
8.2 常用工具
| 工具 | 用途 | 说明 |
|---|---|---|
| Burp Suite | API渗透测试 | 必备,抓包改包 |
| Postman | API测试 | 接口调试 |
| OWASP ZAP | API安全扫描 | 开源免费 |
| apiscan | API漏洞扫描 | 自动化扫描 |
| JWT_Tool | JWT测试 | JWT漏洞利用 |
8.3 测试思路
第1步:收集所有API接口 ↓ 第2步:分析接口的认证方式 ↓ 第3步:测试认证绕过 ↓ 第4步:测试越权(水平+垂直) ↓ 第5步:测试注入(SQL/NoSQL/命令) ↓ 第6步:测试批量赋值 ↓ 第7步:测试信息泄露 ↓ 第8步:测试频率限制9. API安全学习建议
①先学API基础知识。RESTful API、HTTP协议、JSON/XML格式。
②学认证授权机制。JWT、OAuth 2.0、Session、Cookie。
③打靶场练习。OWASP Juice Shop、DVWA、PortSwigger的API labs。
④做代码审计。看别人写的API代码,找漏洞。
⑤参与SRC挖洞。API漏洞在SRC里占比很高,奖金也不错。
【粉丝福利】我整理了一份《API安全大礼包》,含OWASP API Top 10详解、API安全测试checklist、JWT漏洞利用手册、API安全加固指南、Burp API测试插件推荐。免费发给你!大家也可以一起交流API安全经验~
API是数字时代的基础设施,也是安全的重灾区。做好API安全,才能守护好数据。