开放 API 面临滥用、篡改与重放攻击,需构建多层防护体系。
一、请求签名
text
signature = HMAC-SHA256(secret, method + path + timestamp + nonce + body)客户端将签名放入请求头,服务端用相同算法验证。密钥不传输,仅用于本地计算,防止请求被篡改。
二、防重放攻击
- timestamp:拒绝超过 5 分钟的请求
- nonce:服务端用 Redis 记录已使用的随机数,过期时间略大于时间窗
- 幂等键:对写操作要求客户端提供唯一请求 ID
python
def verify(timestamp, nonce):
if abs(time.time() - timestamp) > 300:
return False
if not redis.set(f"nonce:{nonce}", 1, nx=True, ex=600):
return False
return True配合速率限制(令牌桶)与 IP 黑名单,可有效抵御暴力破解与自动化攻击。