18

我们一直在开发 web 应用程序,我们需要在其中实现密码检索的传统 web 应用程序功能。根据趋势,有一些方法,如..

  1. 将密码重置链接发送到用户的电子邮件。
  2. 向用户询问密码恢复的秘密问题。
  3. 重置现有密码并创建新密码并将其发送给用户。这也可能会强制用户在下次登录时更改密码。

我们是否有任何非传统技术来实现密码检索机制?您为此尝试了哪些其他方法?

谢谢。

4

5 回答 5

19

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

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

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

  • 安全问题- 从技术角度来看,这是最大的因素。这里有各种各样的问题,你必须权衡。被入侵的电子邮件帐户意味着黑客可以访问所有允许通过电子邮件发送密码重置链接的用户服务。您可以选择中间立场,即通过电子邮件将密码重置链接发送给用户,然后向用户询问密码提示问题,然后允许他们重置密码。同样,您不应该在任何媒体中公开用户的密码。事实上,如果您有能力向他们展示他们的密码,那么您的系统已经不安全,因为这意味着您没有使用像 SHA-1 这样的安全哈希来存储它们,并且您公司的开发人员可以获取每个人的密码。

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

于 2009-05-26T15:10:25.550 回答
8

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

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

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

于 2010-07-18T22:19:52.987 回答
6

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

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

关于密题法:密题的答案往往不如我们想的那么隐秘。阻止这种“帐户破解”方法符合我们用户的最大利益。

于 2009-05-26T14:05:45.990 回答
4

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

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

于 2009-09-23T11:35:27.867 回答
0

密码重置链接的一种附加方法可能是创建一个随机密钥,该密钥不会出现在电子邮件链接中,一旦单击链接,用户就必须输入该密钥。这将有助于防止人们捕获电子邮件。

于 2011-05-09T20:09:43.450 回答