代码之家  ›  专栏  ›  技术社区  ›  this. __curious_geek

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

  •  18
  • this. __curious_geek  · 技术社区  · 16 年前

    我们一直在研究Web应用程序,其中我们需要实现传统的密码检索Web应用程序功能。根据趋势,有一些方法,比如……

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

    我们是否有实现密码检索机制的非传统技术?你还尝试过其他的方法吗?

    谢谢。

    5 回复  |  直到 16 年前
        1
  •  19
  •   AaronLS    14 年前

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

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

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

    • 安全问题 -从技术角度来看,这是最大的因素。这里有各种各样的问题,你必须权衡一下。受损的电子邮件帐户意味着黑客可以访问所有用户的服务,这些服务允许通过电子邮件发送密码重置链接。您可以选择中间立场,即向用户发送一个密码重置链接,然后向用户询问一个密码提示问题,在该问题之后,用户可以重置密码。同样,您不应该在任何介质中暴露用户的密码。事实上,如果你有能力显示他们的密码,你的系统就已经不安全了,因为这意味着你没有使用安全散列(如sha-1)来存储他们,你公司的开发人员可以获取每个人的密码。

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

        2
  •  8
  •   Adrian A.    14 年前

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

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

    上面的方法并不容易实现,但是非常用户友好(因为它们没有什么新的东西,而且在日常情况下会出现其他方法)。

        3
  •  6
  •   jrharshath    16 年前

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

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

    关于秘密问题的方法:通常情况下,秘密问题的答案并不像我们希望的那样秘密。阻止这种“账户黑客”方法对我们的用户来说是最有利的。

        4
  •  4
  •   securityguy    15 年前

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

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

        5
  •  0
  •   Tom Hubbard    14 年前

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