现代Web应用中密码检索的有效技术

时间:2009-05-26 14:02:36

标签: web-applications passwords password-recovery forgot-password

我们一直致力于Web应用程序,在这里我们需要实现密码检索的传统Web应用程序功能。根据趋势,有一些方法,如..

  1. 向用户的电子邮件发送密码重置链接。
  2. 向用户询问密码恢复问题。
  3. 重置现有密码并创建新密码并将其发送给用户。这也可能会强制用户在下次登录时更改密码。
  4. 我们是否有任何非传统的技术来实现密码检索机制?您为此尝试了哪些其他方法?

    感谢。

5 个答案:

答案 0 :(得分:19)

这取决于您的目标安全级别,支持成本和可用性问题。

出于多种原因,通过电子邮件发送密码重置链接是首选方法:

  • 支持费用 - 从业务角度来看,这是最重要的因素。用户经常忘记他们的密码提示或使用虚假的邮寄地址或忘记他们的用户名。所有这些都是您可能获得支持请求的合理问题。这反过来会产生另一个问题,你必须通过向他们询问最近的帐户活动以及不是什么来确定用户的合法性。如果您不提供这种级别的支持,很多新手用户会感到失望。通过电子邮件发送密码重置链接可以缓解这些问题,因为用户通常只有一个或两个电子邮件地址,他们可以通过提供电子邮件地址轻松恢复用户名/密码。

  • 安全问题 - 从技术角度来看,这是最重要的因素。这里有各种各样的问题需要权衡。受损的电子邮件帐户意味着黑客可以访问所有用户的服务,这些服务允许通过电子邮件发送密码重置链接。您可以选择通过电子邮件向用户发送密码重置链接,从而向用户询问密码提示问题,然后允许他们重置密码。同样,您不应该在任何媒体中公开用户的密码。事实上,如果你有能力向他们展示他们的密码,你的系统就已经不安全了,因为它意味着你没有使用像SHA-1这样的安全散列存储它们,而你公司的开发人员可以获得每个人的密码。

  • 可用性 - 从用户的角度来看,这是最重要的因素。通过电子邮件发送密码重置链接,用户需要查看他们的电子邮件地址,这意味着完成任务的时间最长可达2分钟甚至3分钟。但是,我认为这不是什么大问题。大多数用户似乎并不介意这一点,因为他们觉得自己有过错,这是符合他们最佳利益的安全措施。我只是根据个人经验假设,一般用户可能会有不同的感受。我会将安全性作为比用户体验更高的优先级,因为用户很少需要检索他们的密码(用户很长时间没有登录并忘记密码;用户已将密码保存在重新安装的浏览器中,其他一些边缘情况)。

答案 1 :(得分:8)

我在实践中看到的其他选项包括:

  • 在出现问题时允许第二个密码 - 类似于手机使用的超级密码。
  • 创建文件令牌(通常是PGP密钥),用户将在创建帐户时下载该文件令牌并将其存储在USB记忆棒上,或将其存档以供日后使用。当出现问题时,用户将上传令牌,从而证明他是该帐户的“所有者”,并且该应用程序将让用户更改密码。这可以是一个常量令牌,也可以是一个包含多个令牌的文件(类似于网上银行TAN) - 每次使用令牌时,它也会失效。

上述方法实现起来并不是那么简单,但是用户非常友好(因为它们并没有什么新的东西,并且在日复一日的情况下也是如此)。

答案 2 :(得分:6)

在我看来,向用户的电子邮件发送密码重置链接是最好的方法。这就是Digg的方式,这就是我的方式。

但是在这种方法中,我们需要依赖用户能够访问他的电子邮件。

关于秘密问题方法:秘密问题的答案通常不像我们希望的那样秘密。阻止这种“帐户黑客”的方法符合我们用户的最佳利益。

答案 3 :(得分:4)

网站及其管理员不应该知道其用户的明文密码。应该只存储密码的单向哈希值,以便在身份验证事件中进行比较。因此,不应该选择发送密码明文。

我个人喜欢发送给用户的密码重置链接。记得要过期那个链接。此外,通过电子邮件通知用户密码重置尝试(可以是与重置链接相同的电子邮件),以及成功重置后。

答案 4 :(得分:0)

密码重置链接的另一种方法可能是创建一个随机密钥,该密钥在电子邮件链接中没有出现,用户在点击链接后必须输入该密钥。这有助于人们捕获电子邮件。