feat(auth): 短信登录防刷 — 同一设备id同IP 每小时限 5 次 #78

Merged
marco merged 4 commits from feat/sms-login-rate-limit into main 2026-06-26 13:17:07 +08:00
Member
No description provided.
zhuzihao added 2 commits 2026-06-26 10:59:04 +08:00
/sms/login 增加 (手机号+IP) 每小时最多 5 次限流,挡撞库爆破/高频重登;
与路由上原有 IP 维度限流(20次/分钟,跨号)互补。
- 计数放在验证码校验之前 → 输错码的失败尝试也计数
- 测试账号(.env TEST_ACCOUNT_PHONE)豁免,走自己的每日额度
- 复用 ratelimit 内存固定窗口,受 RATE_LIMIT_ENABLED 总开关控制(默认开)
- 新增 enforce_rate_limit(供路由内按请求体字段如手机号限流)
- 补 test_auth/test_test_account 回归测试(普通号到5次被拦、测试号豁免)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
sms-login 防刷限流键从 (手机号+IP) 改为 (device_id+IP):同一台机器换不同手机号刷登录
也受同一桶约束(5次/小时,成功/失败都计);device_id 空(老客户端)时退化为该 IP 聚一桶,仍受限。
测试号仍豁免。回归测试更新为设备维度(同设备换号仍被拦、换设备独立放行)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
zhuzihao added 1 commit 2026-06-26 12:01:29 +08:00
/sms/send 增加 (device_id + IP) 每小时最多 10 次发码限流,放在真发之前(超限不烧短信)。
- 原单号 60s 冷却 / 单号每日上限都是单号维度,一机换手机号即可绕开 → 设备维度按机器封顶,挡短信轰炸/烧钱。
- 与路由上 IP 维度(10次/分钟)互补;测试号豁免。
- SmsSendRequest 加 device_id(空=按 IP 聚一桶);补回归测试。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
zhuzihao added 1 commit 2026-06-26 12:41:02 +08:00
锁定「测试号(.env TEST_ACCOUNT_PHONE)不受 /sms/send 设备限流约束」——
防有人把发码限流挪到测试账号 early-return 之前,把 QA 联调也风控了。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
marco merged commit 2edebfad83 into main 2026-06-26 13:17:07 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WonderableAI/shaguabijia-app-server#78