这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
注册与找回密码
注册:不只是「填个表单」
注册入口如果设计不好,会招来三样东西:垃圾账号、短信轰炸、撞库探测。
邮箱 / 手机号校验
注册时校验邮箱或手机号,是为了避免无效账号泛滥:
- 邮箱发验证链接,点击后激活。
- 手机发验证码,输入后确认归属。
但这会引入新的成本:验证码通道可能被刷。所以注册接口同样要限流,且验证码要短期有效、限制重试、服务端校验。
防批量注册
攻击者会用脚本批量注册,常见手段:
- 注册接口限流 + 验证码(人机验证)。
- 检测设备指纹、IP 聚集、注册频率等异常模式。
- 同一邮箱/手机号绑定次数限制。
注册后的默认状态
新账号默认「未验证」,验证后才放开核心功能。这比「注册即全部开放」更安全:攻击者批量注册的僵尸账号,因为没验证,能做的事很少。
找回密码:最容易变成「账号接管」的入口
找回密码本质上是一次「重新证明身份」。它比登录更敏感,因为攻击者一旦攻破找回流程,就能直接把你的账号据为己有。
验证方式
- 邮箱 / 手机验证码:验证你拥有注册时绑定的联系方式。
- 问题验证:安全强度低,不推荐作为唯一手段。
- 管理后台重置:人工审核 + 记录,用于极端情况。
重置链接的安全要点
重置链接必须:
✓ 短期有效(如 30 分钟)
✓ 一次性使用,用后即失效
✓ 携带随机的、不可猜测的 token
✓ 只能在服务端校验
重置后的联动
密码被重置后,必须做三件事:
- 撤销旧密码相关的所有会话——防止攻击者用旧密码维持登录。
- 通知用户(邮箱 / 短信):告知密码已重置,如果不是本人操作请立即处理。
- 记录审计日志:谁在什么时候重置了哪个账号,来源 IP 是什么。
修改身份信息:先证明「是你」
改密码、改邮箱、改手机号,都属于身份信息变更。原则是:变更前先重新验证当前身份(输入当前密码或触发 MFA)。
否则会出现一条经典的攻击链:攻击者拿到一个泄露的会话 → 顺手把邮箱改成自己的 → 用「找回密码」重置密码 → 账号彻底被接管。重新验证当前身份,是切断这条链的关键一步。
小结
注册和找回密码是认证系统里「看起来简单」的两个入口,但恰恰是攻击者喜欢钻的地方。核心原则:
- 注册:校验联系方式、防批量、默认低权限。
- 找回:短期一次性链接、重置后撤销旧会话并通知。
- 变更:改密码/邮箱前先重新验证本人。
账号密码这一层到这里就完整了。下一章我们看登录成功之后的事:Token 怎么设计,后续请求怎么证明「同一个已登录用户」。
