
xuyueandClaude Opus 5.5
fb240d4254
feat(限流): 登录、注册、比赛密码防爆破
三处原来都不限次数。学生初始密码弱,/classes/:name/usernames 又能公开列出整班
用户名,等于现成的撞库名单。
services/throttling.ts 加固定窗口计数(INCR + EXPIRE NX,锁定时长就是剩余 TTL),
何时计数由调用方决定:
- 登录按用户名 15 分钟 10 次失败,成功清零;按 IP 15 分钟 100 次失败,成功不清零
(否则拿自己的号登一次就能重置)。机房一个班共用出口 IP,所以 IP 那道放得宽
- 注册按 IP 每小时 100 个成功注册
- 比赛密码按「人 × 比赛」10 分钟 10 次失败
- IP 取 X-Real-IP:api 端口不对外,Caddy 用 {client_ip} 覆盖写入,可信
前端登录、注册、比赛密码三处按新错误码给中文提示。
本机实跑核过:第 11 次错误登录被拦、成功清零(用户名大小写不敏感)、同 IP 换
100 个用户名被拦且别的 IP 不受影响、比赛密码第 11 次被拦。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 14:51:52 +08:00
..
2026-09-16 08:27:34 -06:00
2026-09-20 06:24:05 -06:00
2026-09-21 19:03:21 -06:00
2026-09-16 08:27:34 -06:00
2026-09-20 06:24:05 -06:00
2026-09-27 14:51:52 +08:00
2026-09-20 06:24:05 -06:00
2026-09-27 14:51:52 +08:00
2026-09-16 08:27:34 -06:00
2026-08-07 23:13:57 -06:00
2026-09-19 06:56:38 -06:00
2026-09-16 08:27:34 -06:00
2026-08-07 16:37:20 -06:00
2026-09-16 08:27:34 -06:00
2026-09-16 08:27:34 -06:00
2026-08-07 01:25:36 -06:00
2026-09-07 07:41:09 -06:00
2026-09-16 08:27:34 -06:00
2026-09-17 01:53:37 -06:00
2026-09-16 08:27:34 -06:00
2026-09-16 08:27:34 -06:00