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

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

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

谢谢。

有帮助吗?

解决方案

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

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

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

  • 安全问题 - 从技术角度来看,这是最大的因素。这里有各种各样的问题,您必须权衡。电子邮件帐户被盗意味着黑客可以访问所有用户的服务,从而允许通过电子邮件发送密码重置链接。您可以采取中间立场,即通过电子邮件向用户发送密码重置链接,该链接又询问用户密码提示问题,然后允许他们重置密码。再次强调,您绝对不应该在任何媒介中泄露用户的密码。事实上,如果您有能力向他们显示密码,那么您的系统已经不安全,因为这意味着您没有使用 SHA-1 等安全散列来存储它们,并且您公司的开发人员可以获取每个人的密码。

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

其他提示

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

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

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

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

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top