From 091a3eb5c96a768b7f53efbc96d2d2c79f74eda8 Mon Sep 17 00:00:00 2001 From: zheng020 Date: Fri, 22 May 2026 13:17:06 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E4=BF=AE=E6=AD=A3=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=E5=92=8C=E9=98=B2=E6=9A=B4=E5=8A=9B=E7=A0=B4?= =?UTF-8?q?=E8=A7=A3=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 部署说明移除错误的OSS_STS_ROLE_ARN,短信使用直接AccessKey - 防暴力破解策略补充独立Key的TTL说明 Co-Authored-By: Claude Opus 4.7 --- .../specs/2026-05-22-sms-register-design.md | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/docs/superpowers/specs/2026-05-22-sms-register-design.md b/docs/superpowers/specs/2026-05-22-sms-register-design.md index 562674d..20e2b1d 100644 --- a/docs/superpowers/specs/2026-05-22-sms-register-design.md +++ b/docs/superpowers/specs/2026-05-22-sms-register-design.md @@ -59,8 +59,14 @@ register.vue setNickname.vue ### 2.3 后端流程 ``` -用户输入手机号 → 发送验证码请求 → 后端生成6位随机码 → 存入Redis(60秒有效期) → 调用阿里云SMS API → 返回前端 -用户输入验证码 → 验证请求 → 后端从Redis取出比对 → 一致则标记验证成功 → 继续注册流程 +发送验证码流程: +用户输入手机号 → 发送验证码请求 → 后端生成6位随机码 → 存入Redis(Hash结构,60秒TTL) → 调用阿里云SMS API → 返回前端 + +验证验证码流程: +用户输入验证码 → 验证请求 → 检查Redis中验证码是否存在 → 比对code字段 → 失败则递增attempts,≥3次则删除Key → 验证成功则删除验证码Key并创建verify:register:{mobile}记录(300秒TTL) → 返回verify_token + +注册流程(需携带verify_token): +前端提交注册信息 → 后端检查verify:register:{mobile}是否存在且匹配 → 不匹配则拒绝 → 匹配则处理注册(创建用户、粉丝档案) → 删除verify:register记录 → 返回注册成功 ``` --- @@ -206,8 +212,10 @@ TTL: 60 秒 ### 7.3 防暴力破解策略 - **失败计数**:每次验证失败递增 attempts 字段,≥ 3 次后删除 Key,要求用户重新获取 -- **发送频率限制**:记录 `sms:limit:{mobile}:hour`,每小时最多发送 10 次,超限返回 429 -- **IP 维度限流**(可选):记录 `sms:limit:{ip}:hour`,每 IP 每小时最多请求 30 次 +- **发送频率限制**:每小时最多发送 10 次,超限返回 429 + - 使用独立 Key `sms:limit:register:{mobile}` 计数(String 类型,TTL=3600 秒) +- **IP 维度限流**(可选):每 IP 每小时最多请求 30 次 + - 使用独立 Key `sms:limit:ip:{ip}` 计数(String 类型,TTL=3600 秒) ### 7.4 验证后处理 @@ -317,20 +325,15 @@ Content-Type: application/json ## 10. 部署说明 1. 在阿里云短信服务控制台创建签名和模板,获取 `SignName` 和 `TemplateCode` -2. 在 `deploy/envs/user.env` 中配置阿里云 AccessKey: +2. 在 `deploy/envs/user.env` 中配置阿里云短信 AccessKey: ```bash -# 阿里云短信配置 +# 阿里云短信配置(直接使用 AccessKey,非 STS) SMS_ACCESS_KEY_ID=your_access_key_id SMS_ACCESS_KEY_SECRET=your_access_key_secret SMS_SIGN_NAME=TopFans SMS_TEMPLATE_CODE=SMS_xxxxxxx SMS_REGION=cn-hangzhou - -# 阿里云 OSS 配置(复用同一套凭证) -OSS_ACCESS_KEY_ID=your_access_key_id -OSS_ACCESS_KEY_SECRET=your_access_key_secret -OSS_STS_ROLE_ARN=acs:ram::1387642798143585:role/top-fans-oss-user ``` 3. 重启 userService 服务