API认证与授权
正确的认证授权是API安全的第一道防线。OAuth 2.0是最主流的授权框架,定义四种授权流程:授权码模式(最安全,适用于有后端的应用)、客户端凭证模式(机器对机通信)、资源所有者密码模式(不推荐)和隐式模式(已废弃,用PKCE替代)。
JWT安全:使用RS256非对称签名而非HS256对称签名,避免密钥泄露风险。设置合理的过期时间(Access Token 15分钟,Refresh Token 7天)。在JWT中包含iss(签发者)、aud(受众)和jti(唯一ID)声明,增强安全性。
输入验证与防护
所有API端点必须验证输入数据。使用JSON Schema或类验证器(如Joi、Pydantic)定义严格的输入格式。不仅验证参数类型、长度和格式,还要检查业务规则约束。
注入防护:GraphQL API需要配置查询深度限制和查询复杂度分析,防止恶意查询导致拒绝服务。REST API对所有字符串参数进行转义处理。文件上传端点限制文件类型、大小和数量,上传目录设置为不可执行。
速率限制与DDoS防护
API必须实施速率限制保护后端服务。推荐使用令牌桶算法,在API网关层统一实施。策略示例:普通用户每分钟60次请求,认证用户每分钟300次请求,付费用户按合同约定。
响应头:在响应中返回限流状态:X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset。被限流时返回429状态码和Retry-After头。
API网关安全
API网关是安全策略的统一入口。常见网关包括Kong、APISIX、AWS API Gateway和阿里云API网关。在网关层配置IP白名单/黑名单、请求大小限制、SQL注入和XSS攻击检测规则。
日志审计:所有API请求记录审计日志,包括来源IP、请求时间、访问路径、用户身份和操作结果。日志存储至少保留180天,定期审查异常访问模式。
敏感数据保护
传输中的敏感数据通过TLS加密。存储中的敏感数据使用字段级加密:AES-256-GCM加密数据库中的个人身份信息,密钥由KMS管理。响应中不要返回敏感字段,使用数据脱敏处理。
API密钥管理方面,前端代码中不要硬编码API密钥。使用短期凭证(如STS临时密钥)替代长期密钥。服务器端API密钥存储在密钥管理服务中,运行环境注入。
