安全设计原则
API安全不是事后补丁,而应该在设计阶段就融入。Security by Design意味着每个API端点、每个数据字段、每个错误响应都经过安全考量。
认证与授权设计
认证方案
所有API强制HTTPS,使用OAuth 2.0 Bearer Token认证。Token通过Authorization Header传递,不使用URL参数(避免日志泄露)。实现Token自动续期机制,Access Token短期有效(15分钟),Refresh Token长期有效但支持吊销。
授权模型
实现RBAC(基于角色的访问控制)或ABAC(基于属性的访问控制)。每个API端点明确标注所需权限。使用中间件统一校验,避免在业务代码中分散判断。
输入验证
- 类型验证:严格校验每个参数的数据类型
- 范围验证:数值参数设置合理范围,字符串设置最大长度
- 格式验证:使用正则表达式验证邮箱、手机号等格式
- 白名单验证:枚举类型参数只接受预定义值
- JSON Schema验证:使用API网关或中间件自动校验请求体
输出安全
数据最小化
API响应只返回客户端需要的字段。避免返回内部ID、创建时间、关联对象的完整信息等不必要数据。使用DTO(数据传输对象)模式控制输出字段。
错误信息脱敏
生产环境不暴露堆栈跟踪、SQL语句、内部服务地址等敏感信息。统一错误格式:error_code(业务错误码)+ message(用户友好提示)+ request_id(排查用)。
安全Header
必须设置的响应头:Content-Type(防MIME嗅探)、X-Content-Type-Options: nosniff、X-Frame-Options: DENY、Cache-Control: no-store(敏感数据)、Strict-Transport-Security。
日志与监控
记录所有API调用(IP、用户、端点、状态码、响应时间),但脱敏敏感数据(密码、Token只记录前6位)。设置异常告警:401/403错误突增、单IP高频调用、非工作时间的敏感操作。