密码重置令牌的授权测试,核心不是观察链接能否打开,而是确认它在签发、使用、过期、重新申请和密码变更后,是否仍具备正确的权限。本教程仅适用于书面授权范围内的系统,使用两个专用测试账户和受控邮箱,通过低频操作与状态变化建立证据;不枚举真实账户,不猜测令牌,也不向非测试邮箱发送邮件。
一、先约定范围、邮件预算与停止条件
测试前,由业务负责人、开发运维团队和测试人员共同确认以下条件:

- 目标范围:明确域名、重置入口、相关接口、租户及环境。优先在与生产配置一致的隔离环境执行。
- 测试账户:准备账户 A、B,各自绑定可区分的受控邮箱,不使用管理员或含业务数据的账户。
- 恢复能力:确认测试人员可以恢复两个账户,必要时由运维通过受控渠道解除锁定、撤销令牌和会话。
- 策略基线:记录有效期、是否允许多个待用令牌、重新申请是否撤销旧令牌、成功重置后如何处理其他令牌及登录会话。
- 时间基准:统一记录时区和时间源;能够访问后台时,以服务端签发时间、失效时间和审计事件为依据。
为本轮验证设置一个具体预算:密码重置申请最多 10 次,A 最多 8 次、B 最多 2 次;包含重置通知在内的邮件总量最多 20 封。这些数字是本教程的操作上限,不是通用安全阈值。业务方要求更低时采用更低上限;达到任一上限立即停止,不通过换入口或换账户绕过。
所有请求串行发送,间隔遵循业务约定,不启用自动重试或并发。出现以下情况时,停止当前用例并通知负责人:
- 邮件发送至非受控地址,或账户、租户身份与预期不符;
- 出现账户锁定、限流、服务异常或意外批量通知;
- 成功改变另一测试账户的密码;
- 无法确定当前密码、令牌或会话状态;
- 请求可能影响真实用户或业务数据。
一旦出现跨账户改密,保留最小必要证据后停止扩展验证,不要继续尝试其他身份或权限等级。
二、梳理入口,画出令牌生命周期
从正常“忘记密码”流程开始,仅梳理授权范围内实际使用的网页、应用接口和邮件链接。记录:
- 申请重置时提交了哪些账户标识。
- 邮件链接包含哪些字段,例如令牌、账户标识、流程编号。
- 打开链接是否直接展示改密表单,还是先兑换成受限会话。
- 最终提交新密码时,服务端接收令牌、流程编号还是会话凭证。
- 密码更新后,是否发送通知,以及如何处理其他令牌和会话。
不要把邮件链接中的字符串自动视为整个流程唯一的凭证。有些实现会先将它兑换为短期重置会话,此时需要分别记录“邮件令牌”和“派生凭证”的状态。
可将生命周期简化为:
| 状态变化 | 要验证的问题 |
|---|---|
| 签发 → 待使用 | 是否关联正确账户、用途和有效期 |
| 待使用 → 成功重置 | 密码更新与令牌消费是否一致 |
| 已使用 → 再次提交 | 是否还能再次改变密码 |
| 待使用 → 超时 | 最终提交是否执行服务端时间校验 |
| 再次申请 → 新旧令牌并存或旧令牌失效 | 行为是否符合产品策略 |
| 成功重置 → 其他待用令牌 | 旧凭证是否仍能改变密码 |
OWASP 密码找回安全指南明确建议重置令牌采用安全随机方式生成、妥善存储、单次使用,并在适当时间后失效。本轮重点验证生命周期控制,不通过暴力猜测评估随机性。
三、建立失效假设与验证顺序
给每次签发的令牌分配内部证据编号,不在报告中记录原值。例如,A-01 表示签发给账户 A 的第一枚令牌,而不是令牌内容。
建议按以下顺序执行,每项使用独立的新令牌,避免状态相互污染:
| 用例 | 核心假设 | 最小验证动作 |
|---|---|---|
| 单次使用 | 成功消费的凭证不能再次改密 | 成功重置后重放一次 |
| 有效期 | 超过服务端期限不能改密 | 到期前建立对照,到期后提交 |
| 账户绑定 | A 的凭证不能修改 B | 仅替换实际存在的账户选择字段 |
| 重新申请 | 旧令牌处理符合既定策略 | 为 A 连续申请两次,再尝试旧令牌 |
| 成功重置后的旧令牌 | 改密后其他待用凭证不能继续改密 | 用新令牌成功重置,再尝试旧令牌 |
上述基本流程通常需要 A 的 7 次申请和 B 的 1 次申请。若流程异常或需要补充对照,必须先核对剩余邮件预算;预算不足时另约测试窗口。
四、执行低频验证,以账户状态作为结果
1. 单次使用:重放必须指向最终改密操作
为 A 申请令牌 A-01,正常完成一次密码重置。保存最终提交的请求结构、响应和服务端请求编号,然后使用同一凭证再次提交,设置另一个不同的测试密码。
注意区分两种情况:
- 重新打开链接仍显示表单:只能证明页面可访问,不能证明令牌可重复使用。
- 第二次提交后密码再次变化:才是可复核的重复使用证据。
使用全新、未登录的浏览器会话进行一次必要的登录确认,或由运维核对密码更新事件。不要用原有登录态证明新密码有效,也不要反复尝试登录触发锁定。
若邮件令牌已被兑换,需记录重放的是原始令牌还是派生凭证。原始令牌失效但派生重置会话仍可多次改密,同样需要评估其单次使用控制。
2. 有效期:验证最终提交,而非仅验证页面
为 A 申请独立令牌 A-02,记录服务端签发时间、配置有效期及允许的时钟误差。邮件到达时间受投递延迟影响,不能替代签发时间。
到期前可正常打开页面建立对照,但不要完成密码重置;等待超过约定期限及合理时间误差后,再执行最终提交。若打开页面会兑换凭证,应单独记录该行为及派生凭证期限。
结果按证据强度表述:
- 到期后页面仍可打开,但最终提交被拒绝:不能判定为过期令牌可用。
- 到期后密码确实被更新,且服务端时间线确认已过期:可以确认有效期校验缺陷。
- 只有“邮件发出后等待了一段时间”的记录,没有可信期限或签发时间:只能列为待核实项。
不要通过修改客户端时钟证明服务端过期校验失效,也不要把解码得到的令牌字段当作已经验证的服务端行为。
3. 账户绑定:使用双账户最小对照
分别为 A、B 申请独立令牌,确认正常请求中的账户归属。随后,在 A 的改密请求中,仅替换接口实际使用的账户选择字段,将其改为 B 的测试标识,保留 A 的令牌;其他字段保持正常有效值。
预期安全行为可以是拒绝不匹配的请求,也可以是忽略客户端账户标识、始终以令牌绑定的 A 为准。关键判断是:A 的令牌能否改变 B 的密码。
注意以下边界:
- 若请求中没有账户选择字段,不要自行添加无依据的参数后据此下结论。
- 跨账户组合被拒绝,可能只是会话或防伪校验拒绝;应结合日志确认,不能直接断言账户绑定正确。
- 返回成功时,应核对究竟修改了 A、B,还是根本没有产生密码变更。
- 一旦确认 B 的密码被改变,停止该项验证并恢复账户。
B 的正常流程可作为对照,用来排除账户不可用、密码策略不符或请求结构错误,而不是扩大测试范围。
4. 重新申请:先明确旧令牌策略
为 A 依次申请 A-04、A-05,再尝试使用 A-04 完成重置。
如果产品明确规定“仅最新令牌有效”,旧令牌仍能改密就是策略失效。若产品允许多枚尚未过期、尚未使用的令牌共存,则“重新申请后旧令牌仍有效”本身不足以证明漏洞,需要继续检查每枚令牌的有效期、账户绑定和消费后状态。
一旦使用旧令牌成功改密,该轮状态已经改变,不要继续把新令牌当作“仅重新申请”场景测试。另建独立用例验证成功重置后的撤销行为。
5. 成功重置:检查其他待用凭证
为 A 再申请两枚独立令牌,先用较新的令牌成功重置密码,再尝试用较旧的令牌设置另一个测试密码。
这一步与“同一令牌重放”不同:它检查密码发生安全敏感变化后,先前签发的其他凭证是否仍然有效。如果旧令牌仍能改密,应记录其剩余有效时间和实际密码变化,评估旧邮件泄露后再次夺取账户控制权的风险。
登录会话是另一条生命周期。重置后旧会话是否保留,应单独依据产品策略与风险要求检查,不与重置令牌失效混为同一结论。
五、记录可复核证据,不只保存状态码
HTTP 成功状态不等于密码已更新,错误状态也不能排除后端已产生副作用。每项结论至少关联请求、响应、账户状态;能够获取时,再补充服务端事件。
建议报告保留以下字段:
| 字段 | 记录内容 |
|---|---|
| 用例及授权范围 | 测试编号、环境、入口、账户代号 |
| 策略依据 | 配置、产品约定或待确认事项 |
| 前置状态 | 账户密码版本代号、令牌状态、会话条件 |
| 时间线 | 签发、兑换、提交、过期及密码变更时间 |
| 请求差异 | 哪个字段被替换,其余条件如何保持一致 |
| 观察结果 | 响应、密码状态、审计事件及请求关联编号 |
| 预期与实际 | 明确是哪项校验或失效规则未成立 |
| 清理情况 | 账户恢复、令牌撤销、会话退出、邮件处置 |
报告、截图和工单中遮盖完整重置链接、令牌、密码、会话凭证及邮箱中的个人信息。若必须保留原始请求,应存入受限证据库并规定访问权限和保存期限,不粘贴到普通聊天或工单正文中。证据副本使用内部编号关联,不通过保留令牌前后缀维持可读性。
六、区分安全缺陷、策略差异与证据不足
风险判断应描述已经证明的能力,而不是只写“可能导致账户接管”。
- A 的令牌能修改 B 的密码:证明账户绑定失效;影响范围需结合身份字段和权限边界评估,不继续测试真实账户。
- 已消费凭证还能再次改密:证明单次使用控制失效;风险与凭证泄露机会及可重用窗口有关。
- 过期凭证仍可改密:需有可信的服务端时间与期限证据,才能确认过期校验失效。
- 再次申请后旧令牌仍可用:先判断是否违反既定策略,不自动等同于漏洞。
- 成功重置后其他旧令牌仍可用:应评估旧凭证继续控制账户的风险,并检查是否违反明确的撤销要求。
- 仅页面可访问或返回成功消息:证据不足,不能直接报告为可改密漏洞。
可参考 OWASP 密码修改与重置测试指南组织身份边界验证,但严重程度仍应依据本系统中实际证明的能力、攻击前提和业务影响确定。
七、将发现映射到服务端修复与回归
整改应落在最终改密的服务端路径,而不只是隐藏表单或修改提示消息。
- 绑定账户与用途:由服务端凭证记录确定目标账户,不信任客户端提交的账户标识;区分密码重置与其他用途凭证。
- 执行服务端期限校验:最终提交时检查失效时间;若存在兑换后的重置会话,同步约束其期限与权限。
- 原子消费凭证:将有效性判断、密码更新及令牌消费放在一致的事务或原子控制中,避免重复提交多次成功。
- 明确撤销策略:定义重新申请和成功重置对既有令牌的影响,并覆盖所有相关入口与存储副本。
- 妥善保存凭证:对可采用查表验证的随机令牌,优先保存安全摘要;避免日志记录完整凭证。
- 单独治理会话:根据账户恢复策略提供或执行会话撤销,避免把改密视为所有访问凭证都已失效。
回归测试应同时包含正常成功用例和拒绝用例:正确账户可重置、跨账户组合不可修改目标账户、已使用凭证不可重放、过期凭证不可提交、重新申请行为符合策略、成功重置后旧凭证按规则失效。涉及并发一致性的回归,应另行授权并在隔离环境中完成,不在本轮低频验证中临时增加压力。
八、结束测试并恢复环境
测试完成后,为 A、B 设置全新的最终测试密码,不复用验证过程中出现过的密码;撤销所有待用重置令牌、派生重置会话和测试登录会话。确认账户邮箱、恢复信息及权限均未发生意外变化。
随后清理浏览器与代理中的敏感记录,按证据保留约定封存必要副本,删除受控邮箱中的重置链接邮件及相关副本。若测试涉及邮件安全网关或集中日志,应按组织流程处理残留记录,不能仅靠清空收件箱宣称凭证已清理。
最终报告应分别列出“已确认”“符合策略”和“证据不足”的事项。密码重置测试的完成标准,不是发现一个异常响应,而是能够复核:哪项生命周期规则失效、实际改变了哪个账户、修复落在哪里,以及回归如何证明问题不再发生。
- it2021
- it2021.com
- OWASP
- test
- 密码策略

1F
单次使用这块最容易漏测吧?