Implement 速率 limiting 到 prevent brute-force attacks
Rate limiting caps 数字的 requests per 时间 window, preventing brute-force, credential stuffing, 和 DoS attacks. Learn 令牌 bucket 和 sliding window algorithms.
- 1
速率 limiting restricts 如何许多 requests 客户端能够 make 在时间 window. 常见 algorithms: (1) 固定 window — 简单但 allows bursts 在 window boundaries; (2) Sliding window — smoother, tracks requests 在 rolling window; (3) Token bucket — allows bursts 上到 容量, refills 在 steady 速率.
- 2 哈希计算器 →
Hash 客户端 identifier (IP, 用户 ID, API 键) 到 use as 速率限制键. Use SHA-256 到 avoid storing raw IPs. hash maps 到 counter 在快 存储 (Redis, 在-内存映射).
- 3 HMAC 生成器 →
Sign 速率限制声明 (数量, window 启动) 具有 HMAC 到 prevent tampering. 如果 using 客户端-边速率 limiting (e.g., JWT-based), signed 令牌 prevents 客户端从 resetting 其 own counter.
- 4
为 brute-force 保护开 login: 限制到 5 attempts per 15 minutes per account, 和 10 per IP. Use exponential backoff — 每个失败 attempt increases wait 时间. 之后 5 failures, 锁 account 和 require email 验证. 为 API 速率 limiting: 100 requests/minute 为 free 层, 1000 为 paid. Return 429 Too 许多 Requests 具有 Retry-After 头.
常见问题
- Token bucket vs sliding window?
- Token bucket allows controlled bursts (上到 bucket 容量) 然后 steady-声明速率 — 好为 APIs where occasional bursts 是 acceptable. Sliding window enforces strict 限制在 任何 window — better 为安全-关键 endpoints like login. Choose based 开是否 bursts 是 acceptable.
- 如何 I 处理 distributed 速率 limiting?
- Use shared 存储 (Redis, Memcached) 所以所有 servers see 相同 counters. 为高 吞吐量, use sliding window 具有 Lua scripting 在 Redis (atomic 检查-and-increment). 为全局速率 limiting 在边, use CDN features (Cloudflare, AWS WAF).