为什么密码重置测试被忽视
大多数开发者用自己的电子邮件地址测试密码重置流程一次,就认为完成了。在第五次测试运行后,收件箱里堆满了看起来完全相同的"重置密码"消息。你会失去对哪个链接属于哪次运行的追踪,最终因为太烦人而停止彻底测试。正是这种自满让严重的漏洞溜进生产环境。
你实际需要测试密码重置流程中的什么
简单的"是否发送了邮件"检查远远不够。OWASP Authentication Cheat Sheet 详细描述了一套全面的要求:
- 邮件投递 — 重置邮件是否到达,是否及时?
- 链接正确性 — 邮件中的链接是否指向带有正确令牌的正确页面?
- 令牌过期 — 25小时后点击链接,过期令牌是否被正确拒绝?
- 一次性使用 — 同一重置链接能否使用两次?(不应该能)
- 新请求时使令牌失效 — 用户再次请求重置时,第一个令牌是否失效?
- SSO账户 — 通过OAuth注册的用户会发生什么?
- 速率限制 — 每个地址的重置请求是否有限制?
临时邮件方法 — 步骤详解
最干净的解决方案是为每次测试运行使用全新的临时电子邮件地址。打开临时收件箱,复制地址,在应用程序中注册测试账户,触发重置,并实时观察邮件到达。点击链接,验证完整流程,确认登录有效。对于另一个场景,只需打开新的浏览器标签页即可。
永远不要在代码库中硬编码测试邮件地址。每次使用新鲜的临时邮件收件箱 — 确保测试真实投递并始终从干净状态开始。
令牌安全检查清单
密码重置令牌是常见的攻击面。根据OWASP,安全实现必须满足:
- 至少32个字符,使用密码学安全随机数生成
- 在24小时内过期,理想情况下1小时内
- 一次性使用 — 兑换后立即失效
- 请求新重置时失效
- 按电子邮件地址进行速率限制
- 从不以明文记录
将密码重置纳入回归测试套件
认证库更新时密码重置会悄然损坏。至少添加一个基本的端到端测试:以编程方式创建测试账户,触发重置,拦截外发邮件并验证令牌。使用MXToolbox检查域名的认证配置,并查阅Troy Hunt的博客获取真实安全漏洞的深入见解。