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

问题描述 投票:51回答:7

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

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

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

我正在操作委托人,无法检索密码;必须提供/生成新密码。

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

authentication passwords forgot-password change-password
7个回答
45
投票
  1. 我个人会发送一封电子邮件,其中包含一个短期页面的链接,可以让他们设置一个新密码。使页面名称成为某种UID。
  2. 如果这对您没有吸引力,那么向他们发送新密码并强制他们在首次访问时更改密码也会这样做。

选项1更容易。


25
投票

一些重要的安全问题:

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

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

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

“密码请求电子邮件已发送到您提供的地址。如果电子邮件不会很快到达,请检查您的垃圾邮件文件夹。如果没有收到电子邮件,则您提供的电子邮件中不存在任何帐户。”

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


8
投票

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

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

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

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

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

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


2
投票

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


1
投票

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

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

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

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

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

你们有什么感想?


0
投票

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

其他选项更好,之前的帖子概述了细节。


-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

© www.soinside.com 2019 - 2024. All rights reserved.