SuperAPI AI 工具集

rate-limiting

安全与审计

查看项目

更新于 10-15 10:39

技能介绍

用途

该技能用于为 API 端点添加按用户和按 IP 的速率限制,防止来自被盗账号、机器人或恶意行为者的滥用。它对应 OWASP A04(不安全设计)和 A07(认证失败)两类风险。

为什么速率限制重要

资料指出,没有速率限制时会出现以下问题:

  • 被盗的会话令牌可以在几秒内耗尽所有额度
  • 机器人可以创建数千张支付发票
  • 单个用户即可对服务发起 DoS
  • 针对认证端点的暴力破解攻击会成功

主要能力

技能覆盖多种技术栈的限流实现:

  • Cloudflare Workers(基于 KV 的滑动窗口):提供 checkRateLimit 工具函数,按用户 ID、端点与时间窗口生成 KV 键,统计请求数,超限时记录审计日志并返回 retryAfterSeconds。
  • Express.js / Node.js:给出使用 express-rate-limit 的中间件示例,以及使用 rate-limiter-flexible 配合 Redis 的生产级方案。
  • Next.js(App Router):提供基于中间件的限流示例,并注明内存限流仅适用于单实例部署,无服务器/边缘环境应使用 KV、Redis 或 Cloudflare 限流规则。
  • Cloudflare 仪表盘限流规则:无需改代码即可配置基于 IP 的限流。

推荐限流阈值

资料给出以下推荐值:

  • 额度消耗 / 导出:10 次/分钟,窗口 60 秒
  • 创建支付:5 次/分钟,窗口 60 秒
  • 登录尝试:5 次/分钟,窗口 60 秒
  • 密码重置:3 次/小时,窗口 3600 秒
  • API 通用:60 次/分钟,窗口 60 秒
  • 访客 / 匿名:1 次/天,窗口 86400 秒

使用方式

  1. 在 Cloudflare Workers 中引入 checkRateLimit,在 API 路由中调用并传入 KV 命名空间、用户 ID、端点标识、最大请求数与窗口秒数;超限时返回 429 状态码与 Retry-After 头。
  2. 在 Express 中使用 express-rate-limit 或 rate-limiter-flexible 创建限流中间件,以用户 ID 或 IP 作为键。
  3. 在 Next.js 中通过 middleware.ts 对 /api/ 路径进行限流。
  4. 在 Cloudflare 仪表盘创建限流规则:匹配 URI 路径包含 /api/,速率 100 次/分钟,按 IP 地址,动作是封禁 60 秒。

响应头

资料建议始终包含标准限流响应头:Retry-After、X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset。

测试

资料提供了一个测试示例:连续发起达到上限的请求应返回 200,下一次请求应返回 429,且响应体包含 rate_limit_exceeded 错误与 retryAfter 字段。

适用场景

适用于需要防止 API 滥用、暴力破解、资源耗尽或自动化攻击的 Web 服务,尤其是使用 Cloudflare Workers、Express.js 或 Next.js 构建的 API。

限制

资料明确指出,内存限流仅适用于单实例部署;无服务器或边缘环境应使用 KV、Redis 或 Cloudflare 限流规则。此外,Cloudflare 仪表盘规则可作为基线防御,即使应用层限流存在缺陷也能提供保护。

PDPA 2024 相关性

资料认为速率限制体现了:相称的安全措施、数据最小化、事件预防。没有速率限制而被暴力破解的系统,在 PDPA 2024 下可被视为疏忽的证据。