密码重置功能是一些常见漏洞的起因。例如用户名枚举漏洞(数据库中用户名不存在和密码错误显示不同的错误信息),敏感信息泄露(把明文密码通过e-mail发送给用户)重置密码消息劫持(攻击会者接收到密码重置信息)这些都是在密码重置功能中比较常见的漏洞。 很多开发者都不能真正了解密码重置所能引发的危害,而下文是介绍一些不遵守基本安全准则的开发人员所开发的密码重置功能会带来的危害。 例如,一个的密码恢复重置功能会生成一个令牌,并通过电子邮件发送一个包含令牌的重置密码连接给用户。 令牌应具有以下特征: 1.包含64个字符或者更多 2.唯一性 3.随机性 4.一次性 5.拥有较短寿命(比如在24小时内到期) 当用户点击该链接时,应用程序必须检查令牌是否有效。如果令牌有效,应用程序必须注销这个令牌,以便它不能被重用,并允许用户更改自己的密码。 此外,如果用户试图第二次重置密码,在完成第一次重置过程之前,应用程序必须废止旧的密码重置请求并生成一个新的重置请求。为了提高安全性,也可以使用双重的用户身份认证(但并不是必须使用)。比如,要求用户回答之前填写的隐私问题或确认发送到用户手机的验证码。