API安全的要素
API安全的目标(CIA)
- 机密性(Confientiality):确保信息只被预期的读者访问
- 完整性(Integrity):防止未授权的创建、修改和删除
- 可用性(Availability):当用户性需要访问API时,API总是可用的
常见的API风险(STRIDE)
- 欺骗(Spoofing):伪装成某个人
- 干预(Tampering):将不希望被修改的数据、消息或设置改掉
- 否认(Repudiation):拒绝承认做过的事情
- 信息泄露(Information disclosure):将你希望保密的信息纰漏出来
- 拒绝服务(Denial of Service):阻止用户访问信息和服务
- 越权(Elevation of Privilege):做了你不希望他能做的事
风险与安全机制的对应关系
- 认证-欺骗:确保你的用户或客户端真的是他们自己
- 授权-信息泄露/干预/越权:确保每个针对API的访问都是经过授权的
- 审计-否认:确保所有的操作都被记录,以便追溯和监控
- 流控-拒绝服务:防止用户请求淹没你的API
- 加密-信息泄露:确保出入API的数据是机密的
API安全基本机制
流控
使用Guava做简单的限流
继承Spring框架中的OncePerRequestFilter保证一个请求在每个Filter只被执行一次