好的密码恢复方法

Posted

技术标签:

【中文标题】好的密码恢复方法【英文标题】:Good password recovery methods 【发布时间】:2012-12-26 05:21:28 【问题描述】:

我目前正在为网络应用程序用户的密码恢复方法担心。

一个想法是使用带有恢复网址的电子邮件,只询问用户他/她的用户名,但如果他/她也忘记了,请询问电子邮件地址。

另一个想法是使用“秘密问题”,然后将密码发送给用户。

您知道其他任何可能更好的密码恢复选项吗?除了让用户感到沮丧之外,“密码限制错误”还有什么缺点吗?

编辑: 昨天有人告诉我,在一些旧版本中,一些客户仍在更新和使用,电子邮件地址和用户名都不必是唯一的。

所以我现在完全被困住了。我唯一想到的是使用一个秘密问题,用户可以在首次登录后选择该问题。但不是发送电子邮件,而是直接打开“新密码对话框”。

你还有什么想法吗?

【问题讨论】:

我喜欢生成随机哈希并将其发送给用户的想法,可能还结合了一个秘密问题。请记住,哈希值不应太短,最好使用特殊字符;如 ! [ ] ?. @DominikG 哇,伙计,那个编辑让事情变得更棘手了......你知道你的数据库中有多少(如果有的话)电子邮件冲突吗?与其要求用户在首次登录后设置一个秘密问题,为什么不检查电子邮件的唯一性并在唯一性测试失败时让他们提供不同的电子邮件地址? 这里的问题是很多用户使用像info@company.com这样的电子邮件地址,这是客户的要求。相同用户名的问题很小,因为所有出现的“相同用户名”实际上都是同一个人。 @DominikG 你能合并这些相同的用户名案例吗?如果您可以做到这一点并强制执行用户名唯一性,那么您应该没问题。 【参考方案1】:

我的意见: 假设您要求用户的电子邮件地址在所有注册用户中是唯一的,则密码恢复页面会询问用户的电子邮件地址。您可以将其设为“用户名或电子邮件地址”,但我认为这个小小的调整不会帮助足够多的用户证明您的额外后端处理是合理的。

为了增加安全性,请勿确认或否认在您的数据库中找到用户名或电子邮件地址。

带有重置密码链接的电子邮件应该可以正常工作。使用哈希(越长越好;绝对是 20 个字符或更多),这样黑客就无法轻易猜出重置链接。为了增加安全性,请指定一个时间限制,在此之后重置链接将不再起作用。

一旦用户点击链接并选择了新密码,不要自动将他们登录到他们的帐户;让他们从头开始登录。这将确保他们知道自己的新密码,并减少密码恢复代码中出现错误的机会,让黑客直接登录帐户。

提醒用户检查他们的垃圾邮件文件夹,并提供一个时间窗口,让他们可以合理地假设他们应该收到重置链接(这样他们就知道要等待多长时间才能向您投诉)。

安全问题通常是个坏主意。首先,用户很难记住他们的答案是什么。这就像在用户的密码中添加一些内容,但向世界提示该额外部分可能是什么。并且答案往往不区分大小写,并且只有字母或字母数字。

如果密码恢复系统不适合用户,请确保您提供一种与用户联系的方式。不过要小心,因为这可能是Social Engineering hack 的途径。

密码限制可能会让用户感到沮丧。仔细考虑实施这一点,允许多少次尝试,以及超出该限制的后果。大多数人都有一个密码的变体。现在,从安全的角度来看,这并不聪明,但它确实发生了。行为合理的用户可以在一分钟内尝试 hooper2012、Hooper2012、hooper20121、Hooper20121。

也许您可以在五次尝试失败后让用户在以后的任何尝试之间等待 60 秒。在另外五次尝试失败后,将其加倍至 120 秒。每五次失败的尝试继续加倍等待时间。如果你让它一直持续到 50 次连续失败尝试,那么用完这 50 次尝试所需的最短时间将是1 day 18 hours and 35 minutes。我绝对建议您在代码中添加一些内容,以通知您一天内连续尝试失败超过 12 次的任何帐户。

在连续 50 次尝试失败后暂时停用帐户,并要求用户联系您的技术支持。再次提防社会工程学。

一旦用户提供正确的登录凭据,将等待时间重置为 0。

【讨论】:

以上是关于好的密码恢复方法的主要内容,如果未能解决你的问题,请参考以下文章

MySQLroot密码的恢复方法

Linux-Centos7如何恢复密码

Linux-Centos7如何恢复密码

NGFW module恢复密码操作方法

使用 sha1 密码哈希恢复密码

Ubuntu root 密码忘记-恢复