brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
conducting-api-security-testing对 REST、GraphQL 和 gRPC API 进行安全测试,识别认证、授权、速率限制、输入验证和业务逻辑中的漏洞。测试人员以 OWASP API 安全 Top 10 作为测试框架,结合 Burp Suite 拦截、Postman 集合和自定义脚本,在每个权限级别测试端点安全性。
Independent GitHub snapshot · Automated classification · Original documentation governs
不适用场景:未经书面授权的 API 测试、未明确划定范围的负载测试或拒绝服务测试,以及未采取安全措施对处理真实金融交易的生产 API 进行测试。
映射完整的 API 攻击面:
{"query": "{__schema{types{name,fields{name,args{name,type{name}}}}}}"}
/api/v1/、/api/v2/、/api/internal/)、调试端点(/api/debug、/api/health、/api/metrics)和管理端点测试认证机制的弱点:
alg 改为 none 并删除签名alg 从 RS256 改为 HS256,用公钥签名hashcat -m 16500 jwt.txt wordlist.txt 暴力破解 HMAC 密钥测试对象级授权断裂(BOLA)和功能级授权断裂(BFLA):
GET /api/users/123/orders -> GET /api/users/456/ordersDELETE /api/users/456(仅管理员可删除)PUT /api/users/456/role(角色修改)GET /api/admin/dashboard(管理面板数据)PUT /api/users/123
{"name": "Test", "role": "admin", "isVerified": true, "balance": 99999}
测试 API 输入的注入和验证缺陷:
{"username": "admin' OR 1=1--", "password": "test"}{"username": {"$gt": ""}, "password": {"$gt": ""}}检查 API 响应中的过度数据暴露:
/api/users?page=1、page=2 等)枚举提取所有记录/api/debug、/api/status、/metrics、/health、/.env、/api/swagger.json 是否暴露内部信息| 术语 | 定义 |
|---|---|
| BOLA | 对象级授权断裂(OWASP API #1);未能验证请求用户是否有权访问特定对象,从而导致 IDOR 攻击 |
| BFLA | 功能级授权断裂(OWASP API #5);未能限制低权限用户访问管理或特权 API 功能 |
| 批量赋值 | API 在未过滤的情况下将客户端提供的数据绑定到内部对象属性,允许攻击者修改不应访问的字段 |
| GraphQL 内省 | GraphQL 内置功能,暴露完整的 API schema,包括所有类型、字段和关系;生产环境应禁用 |
| JWT | JSON Web Token;用于 API 认证的自包含令牌格式,包含用密钥对签名的声明 |
| 速率限制 | 限制客户端在时间窗口内可发出的 API 请求数量的控制,防止暴力破解、枚举和滥用 |
背景:一家金融科技初创公司的移动银行应用具有 REST API 后端。API 处理账户管理、资金转账、账单支付和交易历史。测试人员拥有 Swagger 文档以及用户和管理员级别的账户。
方法:
/api/v1/accounts/{accountId}/transactions 上发现 BOLA,允许任何已认证用户查看任意账户的交易历史"dailyTransferLimit": 999999 可绕过配置的转账限制/api/v1/admin/users 可使用标准用户令牌访问(BFLA)常见陷阱:
## 发现:交易历史 API 中的对象级授权断裂
**ID**: API-001
**严重性**: 严重(CVSS 9.1)
**受影响端点**: GET /api/v1/accounts/{accountId}/transactions
**OWASP API 类别**: API1:2023 - 对象级授权断裂
**描述**:
交易历史端点在未验证已认证用户是否拥有该账户的情况下返回指定账户的所有交易。
任何已认证用户均可通过替换 accountId 路径参数查看任意账户的完整交易历史。
**概念验证**:
1. 以用户 A 身份认证(账户 ID:ACC-10045)
2. 请求:GET /api/v1/accounts/ACC-10046/transactions
Authorization: Bearer <用户A令牌>
3. 响应:200 OK,包含用户 B 的完整交易历史
**影响**:
任何已认证用户可查看所有 45,000 个客户账户的完整金融交易历史,
包括金额、日期、收款人和交易描述。
**修复建议**:
实施服务端授权检查,在返回数据前验证已认证用户是否拥有所请求的账户:
const account = await Account.findById(accountId);
if (account.userId !== req.user.id) return res.status(403).json({error: "Forbidden"});