分层边界

接口安全不是一个开关,而是一组相互补充的边界。网络层保护连接,身份机制识别调用方,授权规则限制资源范围,参数校验约束输入,数据库约束保护最终数据。

客户端提交的资源编号、状态和身份信息都应被视为待验证数据。服务端需要根据当前身份重新判断其是否有权访问对应对象。

传输保护

接口应通过 HTTPS 提供服务,并正确验证证书。TLS 用于降低传输内容被旁路读取、修改或伪造的风险。旧协议和不安全密码套件应按部署环境的安全基线逐步停用。

代理层终止 TLS 时,代理到应用之间的网络也要有清晰信任边界。应用不能无条件信任客户端自行提交的转发头。

身份与授权

认证回答“调用方是谁”,授权回答“调用方可以做什么”。接口在读取或修改带有对象编号的数据时,应逐项执行对象级授权检查,不能只验证已经登录。

令牌应设置有效期、作用域和撤销路径。高权限操作可采用更短有效期或额外确认。错误响应避免泄露某个对象是否真实存在。

输入与输出

服务端应限制字段类型、长度、数量、字符集和嵌套深度。只接受已知字段,避免把客户端 JSON 直接映射到内部数据模型并自动更新所有属性。

输出也需要最小化。内部编号、调试信息、配置路径和无关字段不应因为序列化方便而全部返回。

频率控制

频率限制用于保护系统容量和关键操作。限制维度可以是身份、地址、接口、资源或组合键。超过限制时可返回 429,并在适用时提供 Retry-After

频率控制不应只在单个应用进程的内存中实现,否则多实例部署时统计会分散。对高成本接口,还要限制并发数和请求正文大小。

日志与配置

日志中应避免保存完整密钥、令牌、签名原文和不必要的个人数据。确需排查时,可以保存字段摘要、末尾少量字符、密钥版本和请求编号。

配置与密钥应通过受控配置系统或环境注入,不写入公开仓库。权限遵循最小化原则,并定期检查长期未使用的身份和密钥。

参考资料