API 安全实战:常见漏洞与防护策略
随着微服务和前后端分离架构的普及,API 成为系统的核心接入点,也成为攻击者的主要目标。OWASP API Security Top 10 指出,API 安全问题已经超越传统 Web 漏洞,成为最突出的安全威胁。
一、OWASP API Security Top 10 概览
- 对象级别授权缺失(BOLA/IDOR)
- 身份认证缺陷
- 对象属性级别授权缺失(BOPLA)
- 资源消耗无限制
- 功能级别授权缺失
- 服务端请求伪造(SSRF)
- 安全配置错误
- 注入攻击
- 库存管理不当
- API 使用不安全
二、IDOR(越权访问)防护
IDOR(Insecure Direct Object Reference)是最常见的 API 漏洞,攻击者通过修改 ID 访问他人数据。
# 错误示例 GET /api/orders/12345 # 直接用数字 ID,攻击者可以遍历 # 正确做法 GET /api/orders/550e8400-e29b-41d4-a716-446655440000 # 使用 UUID # 同时必须在后端验证:该订单是否属于当前登录用户
三、认证与授权
JWT 安全最佳实践:
- 使用 RS256(非对称签名),不要用 HS256 并在客户端存密钥
- 设置合理过期时间(access token 15-30分钟,refresh token 7天)
- 验证 aud、iss、exp 字段
- 不要在 JWT payload 中存储敏感信息(Base64可解码)
- 拒绝 alg=none 的 token
四、速率限制与防暴力破解
# Nginx 限流
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
location /api/login {
limit_req zone=login burst=3 nodelay;
}
# 应用层:登录失败 5 次锁定 15 分钟
# 敏感操作需要二次验证
# 使用 CAPTCHA 区分人机
五、SQL 注入防护
# 错误:字符串拼接
query = "SELECT * FROM users WHERE id = " + user_id
# 正确:参数化查询
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
# ORM 安全使用
User.objects.filter(id=user_id) # 自动参数化,安全
六、SSRF 防护
SSRF(服务端请求伪造)允许攻击者通过服务器发起内网请求,访问元数据服务(如 AWS/阿里云的 169.254.169.254)。防护措施:白名单域名/IP、禁止内网地址、禁用重定向跟随、不将用户输入直接用于 HTTP 请求。
七、安全响应头
Strict-Transport-Security: max-age=31536000; includeSubDomains # 强制 HTTPS X-Content-Type-Options: nosniff # 禁止 MIME 嗅探 X-Frame-Options: DENY # 禁止嵌入 iframe(防点击劫持) Content-Security-Policy: default-src 'self' # CSP 策略 X-XSS-Protection: 1; mode=block # XSS 过滤 Referrer-Policy: strict-origin-when-cross-origin
八、API 安全测试工具
- OWASP ZAP:免费开源的自动化安全扫描器
- Burp Suite:专业渗透测试工具,手动测试首选
- Postman + Newman:API 功能 + 安全测试自动化
- Semgrep:SAST 静态代码安全扫描
总结
API 安全需要在设计阶段就融入,而不是事后补丁。核心原则:最小权限、默认拒绝、输入验证、输出编码、安全日志。将安全测试纳入 CI/CD 流程,让安全成为开发流程的一部分,而非阻碍。