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

时间:2009-02-07 02:10:39

标签: authentication passwords forgot-password change-password

我想知道在网站上创建忘记密码功能的最佳方法是什么。我见过很多,这里有几个或组合:

  • 密码短语问题/答案(1个或更多)
  • 使用新密码发送电子邮件
  • 在屏幕上提供新密码
  • 通过电子邮件确认:必须单击链接以获取新密码
  • 要求用户输入新密码的页面

您会在忘记密码功能中添加哪些组合或附加步骤?我想知道他们如何申请新密码以及他们最终如何获得密码。

我在校长上操作,无法检索密码;必须提供/生成新密码。

编辑我喜欢Cory所说的关于如果用户名存在不显示的内容,但我想知道要显示什么。我认为问题的一半是用户忘记了他们使用的电子邮件地址,显示某种“不存在”的消息是有用的。任何解决方案?

7 个答案:

答案 0 :(得分:45)

  1. 我个人会发送一封电子邮件,其中包含指向短期页面的链接,以便他们设置新密码。使页面名称成为某种UID。
  2. 如果这对您没有吸引力,那么向他们发送新密码并强制他们在首次访问时更改密码也会这样做。
  3. 选项1更容易。

答案 1 :(得分:25)

一些重要的安全问题:

  • 密码短语问题/答案实际上会降低安全性,因为它通常会成为流程中最薄弱的环节。猜测某人的答案往往比密码更容易 - 特别是如果没有仔细选择问题。
  • 假设电子邮件作为系统中的用户名运行(通常建议出于各种原因),对密码重置请求的响应不应指示是否找到了有效帐户。它应该简单地说明密码请求电子邮件已发送到提供的地址。为什么?指示电子邮件存在/不存在的响应允许黑客通过提交多个密码请求(通常通过诸如burp套件的HTTP代理)并且注意是否找到电子邮件来收集用户帐户的列表。为了防止登录收获,您必须确保没有登录/身份验证相关功能提供有关何时在登录/通行证重置表单上输入有效用户的电子邮件的任何指示。

有关更多背景信息,请查看Web Application Hackers Handbook。这是关于创建安全身份验证模型的绝佳读物。

编辑:关于编辑中的问题 - 我建议:

  

“密码请求电子邮件已经发送   发送到您提供的地址。如果   电子邮件不会很快到达,   请检查您的垃圾邮件文件夹如果不   电子邮件到达,然后没有帐户存在   用你提供的电子邮件。“

在易用性和安全性之间进行了权衡。您必须根据具体情况对此进行平衡 - 您和您的用户的安全性是否足以证明此不便之处?

答案 2 :(得分:8)

使用新密码发送电子邮件。

在密码到达时强制更改密码并输入新密码。

这确保了想要密码的人将是唯一进入该帐户的人。

如果电子邮件被嗅到,有人可以进入帐户(当然),但真正的一方会立即发现这一点(因为他们发送的密码不起作用)。

还向用户发送密码更改确认。

如果有人获得了新密码,然后发送了一封电子邮件“thanx更改密码”,那么他们会感到非常困惑,如果他们不这样做,他们会与管理员交谈。

答案 3 :(得分:2)

使用电子邮件验证/密码重置链接可以提供更好的安全性。 如果你环顾四周这是大多数网站如何做到这一点,人们已经习惯了这种验证,所以我建议使用这种类型的身份验证。

答案 4 :(得分:1)

我认为(gbrandt's)选项2如果与你已经为用户提供的一些个人信息结合起来将是一个很好的方法。即出生日期。

当用户通过输入他的电子邮件地址请求新密码(重置)时,他还必须在重置密码之前输入正确的出生日期(或其他内容),并通过电子邮件将新密码发送给用户。 / p>

只有那些了解他的人才可能通过重置密码来惹恼他!它不能是一个陌生人或机器人

5或7个不良电子邮件地址&用户通过电子邮件发送的出生日期组合,其密码已被请求重置并且由于凭证不正确而失败。然后,该帐户的密码重置将暂停24小时或任何所需的时间段。

(如果有太多用户联系webadmin关于此电子邮件,他会知道有人试图恶意获取您网站/应用中的信息)

你们有什么想法?

答案 5 :(得分:0)

选项1. 是一个好主意,因为通常他的其他人很容易猜到。 Sarah Palin的个人电子邮件(我认为雅虎)被第三方以这种方式攻击。

其他选项更好,以前的帖子概述了详细信息。

答案 6 :(得分:-1)

我想到的想法是在发送给用户的链接中签署数据。然后,当用户单击链接并且服务器接收到呼叫时,服务器也会获取加密部分并可以验证数据是否未被触及。

我已经为这个用例实现了一个JAVA项目。它在GitHub上,开源。它完美地回答了你的问题......用Java实现。

至于电子邮件中的链接 - 它会生成链接,并在使用时对其进行验证。

对所有事情都有解释(如果缺少某些东西 - 请告诉我......)

看看:https://github.com/OhadR/Authentication-Flows

查看Demo here

这是使用auth-flow的客户端Web应用程序,README包含所有解释。它会指导您实施:https://github.com/OhadR/oAuth2-sample/tree/master/authentication-flows