欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

API 安全:速率限制、签名与防重放攻击

发表于:|最后更新:|分类:安全与运维|阅读:5070 次

开放 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 黑名单,可有效抵御暴力破解与自动化攻击。