API限流防护

实现API速率限制

提示词

请实现API限流:

需求:
- 全局限流:每IP每分钟100次
- 特定接口更严格:登录每IP每分钟5次
- 用户级别限流:每用户每天1000次

算法:[滑动窗口/令牌桶/漏桶]
存储:[Redis/内存]

要求:
1. 限流中间件
2. 响应头(X-RateLimit-*)
3. 超限返回429
4. 重试时间提示
5. 白名单

示例输出

const rateLimit = require('express-rate-limit');
const RedisStore = require('rate-limit-redis');

// 全局限流
const globalLimiter = rateLimit({
  store: new RedisStore({ client: redis }),
  windowMs: 60 * 1000, // 1分钟
  max: 100,
  standardHeaders: true,
  message: { error: '请求过于频繁,请稍后再试' },
});

// 登录接口限流(更严格)
const loginLimiter = rateLimit({
  store: new RedisStore({ client: redis, prefix: 'login:' }),
  windowMs: 60 * 1000,
  max: 5,
  skipSuccessfulRequests: true, // 成功登录不计
  message: { error: '尝试次数过多,请15分钟后再试' },
  standardHeaders: true,
});

app.use(globalLimiter);
app.use('/auth/login', loginLimiter);
0

评论 0

更多

登录后可点赞、收藏、评论和举报。

还没有评论,先发起一个具体问题。