API 安全实战:常见漏洞与防护策略

API 安全实战:常见漏洞与防护策略

随着微服务和前后端分离架构的普及,API 成为系统的核心接入点,也成为攻击者的主要目标。OWASP API Security Top 10 指出,API 安全问题已经超越传统 Web 漏洞,成为最突出的安全威胁。

一、OWASP API Security Top 10 概览

  1. 对象级别授权缺失(BOLA/IDOR)
  2. 身份认证缺陷
  3. 对象属性级别授权缺失(BOPLA)
  4. 资源消耗无限制
  5. 功能级别授权缺失
  6. 服务端请求伪造(SSRF)
  7. 安全配置错误
  8. 注入攻击
  9. 库存管理不当
  10. 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 流程,让安全成为开发流程的一部分,而非阻碍。

发表评论