API 安全覆盖传输、身份认证、授权、输入校验、数据加密、防攻击、日志审计、脱敏、密钥管理全链路,下面分维度整理可落地的方案。
一、传输层安全:防止网络窃听、篡改
强制 HTTPS (TLS 1.2+/TLS1.3)
禁止 HTTP 明文调用,关闭低版本 TLS(TLS1.0、TLS1.1);配置强加密套件。
开启 HSTS,防止降级劫持;证书使用正规 CA 证书,禁止自签名证书上线。
避免 URL 携带敏感参数
GET 请求参数会留在访问日志、代理日志,密码、token、身份证等敏感信息不要放 URL query,改用 Header 或 POST Body。

二、身份认证:确认调用方是谁,拒绝匿名访问
核心原则:永远不允许无认证匿名调用敏感 API。
三、授权控制:认证通过≠可以随便操作(最小权限)
RBAC 基于角色访问控制:不同调用方分配不同接口、数据权限。
数据级别权限:同一个 API,A 调用只能看 A 的数据,不能越权看到别人数据,防止水平越权、垂直越权。
Scope 作用域限制:OAuth 场景限制 token 可调用的接口与能力。
常见漏洞:只做登录校验,没有做数据权限校验,导致越权漏洞。
四、输入校验与防注入攻击
所有来自调用方的入参都不可信,无论 Header、Query、Body。
强参数校验:参数类型、长度、格式、值域白名单校验,拒绝非法输入。
防注入:SQL 注入、NoSQL 注入、命令注入、XSS;使用预编译、ORM,禁止直接拼接 SQL。
防 SSRF:对外请求的 API 严格限制内网地址,禁止访问内网 IP、元数据地址。
JSON 解析防护:限制请求体最大大小,防止超大 JSON DoS。
五、数据加密与脱敏
1. 传输加密:HTTPS(传输中加密)
2. 存储加密(服务端)
敏感数据(手机号、身份证、银行卡)数据库加密存储:AES 对称加密;高安全场景使用 KMS 密钥管理服务,密钥不和业务代码放一起。
3. 返回脱敏
API 返回时对敏感字段脱敏:手机号
138****1234,身份证320***********1234。非必要不返回敏感字段,遵循 “返回最小数据集”。
4. 端到端加密
极高安全场景:业务数据在客户端加密,服务端只处理密文,服务端无法解密业务明文。
六、接口防攻击防护
限流 & 熔断
按 API Key / 账号 / IP 做 QPS 限流,防止暴力破解、CC 攻击;区分普通接口与高危接口(登录、转账)单独收紧阈值。
防重放攻击
请求增加
timestamp时间戳 + nonce随机串 + 请求签名。服务端校验时间戳(±5 分钟窗口),校验 nonce 是否已经使用过,拦截重复回放旧请求。
请求签名(重要)
把请求参数 + 时间 + nonce,用密钥做摘要签名,服务端重新计算签名比对,防止参数被中间人篡改。
流程:客户端:原始参数 → 拼接字符串 → secret 签名 → 把 sign、timestamp、nonce 随请求传给服务端;服务端用同样规则重算 sign 对比。
七、密钥、凭证管理
API Key、密钥、数据库密码禁止硬编码到代码、配置文件、Git 仓库,使用密钥管理系统 KMS、环境变量、配置中心。
密钥定期轮换;泄露立刻作废;区分开发 / 测试 / 生产密钥。
前端严禁存放高权限密钥;前端调用后端 API,由后端做代理中转。

八、日志、审计与异常处理
访问日志完整留存:调用方标识、调用时间、接口路径、响应码,日志禁止记录明文密码、token、身份证等敏感数据,敏感字段打码。
审计告警:异常行为告警,短时间大量失败鉴权、越权访问、高频调用触发告警。
错误返回不要泄露内部信息:异常响应禁止返回堆栈、数据库报错、服务器版本,对外返回统一业务错误码。
九、其他安全最佳实践
接口版本管理,旧版本不安全 API 及时下线。
安全测试:渗透测试、API 漏洞扫描(OWASP API Security Top10)。
输出也要校验:API 返回数据同样做过滤,防止返回过多内部字段。
CORS 跨域严格配置,不配置
*通配符,限制可信域名,防止浏览器跨域窃取数据。
OWASP API Security Top10 重点风险简要
接口对象级别越权(BOLA)
认证失效
对象属性越权
资源耗尽(限流缺失)
批量分配
不安全的通信
安全配置错误
注入
资产管理缺失
日志与监控不足
极简落地优先级(快速实施)
全部 HTTPS + 关闭 HTTP
必须认证(APIKey/OAuth/mTLS)
请求签名 + 时间戳防重放
入参全量校验
限流防刷
敏感数据传输不放在 URL,返回脱敏
密钥不硬编码,日志脱敏,审计告警
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢