用户点邮件里的重置链接改完密码,把同一封邮件里的链接再点一次,居然还能进重置页,等于留了后门。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,重置密钥在校验成功之后没有立即删除,同一个令牌在有效期内可以反复使用,邮件被转发出去谁都能改密码,风险很实在。

「WordPress 密码重置链接」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。改完顺手把文档补一句,省得下次自己重新推一遍。

$user = check_password_reset_key($key, $login);
if (!is_wp_error($user)) {
  delete_user_meta($user->ID, 'activation_key');
  wp_destroy_all_sessions($user->ID);
}

监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

具体做法是,校验通过之后立刻删掉该用户身上的激活密钥;改密完成之后再把该用户名下的全部会话清掉;把重置链接的有效期缩短到半小时以内,够用就行。

最后用这个标准收尾,同一链接第二次打开提示已失效,改密后旧设备会话全部退出。

作者 9823189