注册与找回密码

注册:不只是「填个表单」

注册入口如果设计不好,会招来三样东西:垃圾账号、短信轰炸、撞库探测。

邮箱 / 手机号校验

注册时校验邮箱或手机号,是为了避免无效账号泛滥:

  • 邮箱发验证链接,点击后激活。
  • 手机发验证码,输入后确认归属。

但这会引入新的成本:验证码通道可能被刷。所以注册接口同样要限流,且验证码要短期有效、限制重试、服务端校验。

防批量注册

攻击者会用脚本批量注册,常见手段:

  • 注册接口限流 + 验证码(人机验证)。
  • 检测设备指纹、IP 聚集、注册频率等异常模式。
  • 同一邮箱/手机号绑定次数限制。

注册后的默认状态

新账号默认「未验证」,验证后才放开核心功能。这比「注册即全部开放」更安全:攻击者批量注册的僵尸账号,因为没验证,能做的事很少。

找回密码:最容易变成「账号接管」的入口

找回密码本质上是一次「重新证明身份」。它比登录更敏感,因为攻击者一旦攻破找回流程,就能直接把你的账号据为己有。

验证方式

  • 邮箱 / 手机验证码:验证你拥有注册时绑定的联系方式。
  • 问题验证:安全强度低,不推荐作为唯一手段。
  • 管理后台重置:人工审核 + 记录,用于极端情况。

重置链接的安全要点

重置链接必须:
✓ 短期有效(如 30 分钟)
✓ 一次性使用,用后即失效
✓ 携带随机的、不可猜测的 token
✓ 只能在服务端校验

重置后的联动

密码被重置后,必须做三件事:

  1. 撤销旧密码相关的所有会话——防止攻击者用旧密码维持登录。
  2. 通知用户(邮箱 / 短信):告知密码已重置,如果不是本人操作请立即处理。
  3. 记录审计日志:谁在什么时候重置了哪个账号,来源 IP 是什么。

修改身份信息:先证明「是你」

改密码、改邮箱、改手机号,都属于身份信息变更。原则是:变更前先重新验证当前身份(输入当前密码或触发 MFA)。

否则会出现一条经典的攻击链:攻击者拿到一个泄露的会话 → 顺手把邮箱改成自己的 → 用「找回密码」重置密码 → 账号彻底被接管。重新验证当前身份,是切断这条链的关键一步。

小结

注册和找回密码是认证系统里「看起来简单」的两个入口,但恰恰是攻击者喜欢钻的地方。核心原则:

  • 注册:校验联系方式、防批量、默认低权限。
  • 找回:短期一次性链接、重置后撤销旧会话并通知。
  • 变更:改密码/邮箱前先重新验证本人。

账号密码这一层到这里就完整了。下一章我们看登录成功之后的事:Token 怎么设计,后续请求怎么证明「同一个已登录用户」。

发现内容有问题?

告诉我们哪里需要改进。