什么是最好的"忘记密码"方法?

Edw*_*uay 54 security md5 application-design forgot-password

可能重复:
忘记密码:实现忘记密码功能的最佳方法是什么?

我正在编写一个社区网站.

我想构建一个"忘记密码"功能.

环顾不同的网站,我发现他们使用以下三个选项之一:

  1. 向用户发送一封电子邮件,其中包含指向唯一隐藏网址的链接,该网址允许他更改密码(Gmail和亚马逊)

  2. 向用户发送一封包含新的随机生成密码的电子邮件(Wordpress)

  3. 向用户发送他当前的密码(www.teach12.com)

选项#3似乎对用户来说最方便,但由于我将密码保存为MD5哈希,我不知道选项#3是如何可用的,因为MD5是不可逆的.这似乎也是一种不安全的选择,因为它意味着网站必须在某处以明文形式保存密码,并且至少明文密码是通过不安全的电子邮件发送给用户的.或者我在这里遗漏了什么?

因此,如果我不能做选项#1,选项#2似乎是最简单的编程,因为我只需要更改用户的密码并将其发送给他.虽然这有点不安全,因为您必须通过不安全的电子邮件传递实时密码.然而,这也可能被麻烦制造者误用,通过输入随机电子邮件和不断更改各种用户的密码来纠缠用户.

选项#1似乎是最安全的,但需要一些额外的编程来处理过期的隐藏URL等,但它似乎是大型网站使用的.

你有什么经验使用/编程这些不同的选项?有没有我错过的选择?

Jef*_*ser 34

4)用两个随机金额贷记他们的银行账户并要求他们输入
.5)蜗牛给他们发一些新密码并要求他们输入
.6)让他们发短信或打电话给某个号码然后输入一些价值给手机他们在手机上注册的手机号码.
7)通过外包给Stack Overflow,Facebook,博客引擎等OpenID提供商,完全摆脱密码管理问题.

在这些之外,使用选项#1或#2,添加的功能都会在一小时后到期.

  • #7是胜利者.这也减少了你的责任! (3认同)

Cor*_*use 9

对于描述#1和#2等同的答案,我感到震惊.它们根本不存在.向用户发送短期链接以更改其密码是最方便,最常用且最安全的方法,不涉及带外交互(邮件,文本消息等).原因如下:

  1. 通过忘记密码链接设置临时密码允许用户有效地更改用户密码,并在用户知道用户登录时将其锁定在帐户之外.通过链接,用户只需知道某人正在搞乱并且他们的访问不会受到影响.
  2. 密码重置链接仅在短时间内有效,因此攻击者可以使用非常小的窗口进行攻击.即使他们这样做,用户也会知道,因为如果攻击者拦截了链接并使用它来更改密码,则重置链接将不再有效.如果用户未立即更改新分配的密码,则截获密码的攻击者可以无限期地悄悄地冒充用户.所以最大的区别是,虽然黑客可以拦截重置密码链接电子邮件,如果他们使用该链接更改用户的密码,用户将知道某些错误,因为该链接将无法工作,他们将生成另一个密码重置请求.
  3. 易于使用 - 用户只需单击其电子邮件中的链接,而不是键入您生成的新随机密码.

安全问题通常会使网站安全性降低,而不是更多 - 它们是另一种攻击媒介,通常是最薄弱的环节.我强烈建议阅读Web应用程序黑客手册,以便对此主题进行精彩讨论.


Mar*_*ler 8

请注意,选项#2还要求您跟踪旧密码,如果未在24小时内使用,则使新随机密码失效.

否则我可以通过反复向您发送一个新的随机密码来惹恼您 - 如果您不在您的电子邮件附近,您可能不知道为什么您不能使用您的普通密码登录.

此外,请避免要求"识别问题".这些问题的答案通常比真实密码更容易猜测/查找 - 因此每个人都可以将自己标识为我.请参阅Sarah Palin的故事,了解最近的例子,了解这是多么不安全.


Oli*_*Oli 6

选项1和2彼此不安全.

那里.我说了.如果用户的电子邮件帐户遭到破坏,除非您收集更多私人数据,例如他们的地址,母亲的婚前姓名 - 所有这些都可以被猜到,因此没有合理的安全方式来做事情.

我见过的最好的(尽管最烦人的)版本是你需要记住一个秘密问题一个秘密答案的地方.这意味着用户必须记住他们提出的问题,当然,这也可能永远被遗忘!

如果他们忘记了这个问题并且你是一个"真正的"公司,那么总是可以选择通过帖子向用户发送令牌,并提供如何重置所有安全性的说明......黑客很可能无法访问他们的真实邮件.

这种情况的偏差是在用户创建帐户时收集电话号码.如果它存在并且他们不记得他们的任何细节,你可以设置某种自动呼叫系统,告诉他们如何重置他们的细节.

关于#2有一点需要提及:不要让进程覆盖当前帐户密码.如果发生这种情况,任何人都可以说他们忘记了任何帐户的密码,从而触发了大量不必要的密码更改.