H6.11.2single-use expiring reset link设计研究
重置链接需要设置有效期并且一次性使用
别名: 重置密码链接 · password reset token · 找回邮件过期
概念解释
找回邮件里的链接持有改密权,不是普通登录。有效期加一次性指令牌在短窗口后作废,并且在第一次成功改密(或明确取消)后立即作废,同一 URL 不能再改一次密。这条针对重置令牌的寿命,不讨论登录用的魔法链接,也不讨论改密成功后要不要踢会话——踢会话是下一步保险。
机制
重置链接会躺在收件箱、转发、备份与安全网关里,比登录链接活得更久、后果更大:持有它的人可以指定新密码。没有 TTL,旧邮件在数月后仍是钥匙。没有一次性,成功改密后转发副本还能再改。预取扫描器会先打开链接,若「第一次 GET」就作废,主人点开时已经死;作废点应落在改密成功或「进入改密页并提交」这类兑换,而不是落地页预览。人需要看见「还剩多久、已使用请重新申请」,否则会把死链当成账号不存在。新发链接应作废尚未使用的旧链接,避免收件箱里多把钥匙。
怎么研究
序列测试:过期后打开、成功改密后再打开、扫描器预取后再由人提交。
自变量:TTL 长度、作废触发(GET / 提交成功 / 新链接发出)、是否同时作废旧令牌。 因变量:过期或已使用后能否改密、预取是否误杀真人提交、收件箱中并行有效令牌数。
不要用登录魔法链接的实验代替重置——威胁模型是改密权。TTL 没有万能小时数;窗口要覆盖邮件延迟,又不能把改密权留过夜。测量文案能否让人区分「链接过期」和「账号不存在」。
边界
有的法规要求改密必须再走第二因素,链接只是第一步,TTL 仍然适用。客服发放的一次性码如果可反复提交,等于没有一次性。应用内已登录的「改密」不走邮件链接,这条管的是未登录找回。把重置做成永远有效的短网址「方便收藏」是漏洞,不是无障碍。
怎么落地
- 重置令牌设短 TTL,在改密提交成功后作废,并发出新链接时作废旧链接;落地预览与提交兑换分开。
- 过期或已使用时说明原因并提供重新申请,不显示「用户名或密码错误」。
- 打开重置页后若人放弃,令牌仍受 TTL 约束,不要把「看过页面」当成已使用除非已经提交。
- 验证:改密成功后同一链接在另一浏览器打开不得再改。等到 TTL 之后打开应失败。用会预取的邮箱扫描走一遍,主人随后仍应能提交一次。发出第二封找回信后,第一封链接应失效。