忘记密码并显示帐户是否存在

信息安全 密码 密码管理 登记
2021-08-16 08:26:42

因此,当您点击忘记密码的链接并输入您的电子邮件地址时,网站(以及与我交谈过的其他程序员)似乎是两种心态之一;

  • 通知用户电子邮件地址是否与数据库中的一个匹配,并根据此建议是否设置了重置密码电子邮件;
  • 立即回复“已发送电子邮件”或“如果此用户存在,我们已向您发送密码重置电子邮件”,无论是否发生匹配导致电子邮件已发送。出于安全原因,这样做(显然)。

我自己实现了后者,并且通常发现它引起了用户的烦恼:

  1. 如果用户错误地输入了他们的电子邮件地址,他们会被告知已发送一封电子邮件,但他们永远不会收到一封。
  2. 如果他们输入的电子邮件地址与注册时的电子邮件地址不同,他们将再次收到电子邮件。
  3. 上述组合可能导致多次尝试但未收到密码重置电子邮件,从而导致放弃。

最后,在调查使用第二种情况的流行网站后,我发现尝试在这些网站上注册一个帐户,其中输入的电子邮件地址与现有帐户匹配,“此电子邮件地址已在使用中,或不可用”类型无论如何都会显示消息。

因此,不透露密码重置电子邮件是否与帐户匹配有什么好处?当注册需要显示电子邮件匹配时,这些好处有哪些?

3个回答

有时需要在安全性和可用性之间进行权衡。

如果其他人不知道他们正在使用该网站对您或您的用户很重要,那么您的第二选择是最好的选择。

您可以随时向系统中不存在的地址发送电子邮件,例如“有人请求重置此地址的密码,但它不在我们的系统中”。这可以处理您的第二次投诉。

在确认页面上添加一个链接以重新进行密码重置。希望他们下次能正确输入电子邮件。

因此,请确定避免用户枚举是否比偶尔输入错误的电子邮件地址更重要。

不透露密码重置电子邮件是否与帐户匹配有什么好处

您不要向攻击者提供或确认用户的电子邮件地址列表,也不要让其他人知道给定用户正在使用您的网站。如果它是一个关于小猫的网站,谁在乎呢?如果是银行或婚外情网站,那么这很重要。

当注册需要显示电子邮件匹配时,这些有什么好处?

谁说注册需要这个?为注册做同样的事情。请求电子邮件地址,发送“第 2 步”链接,或“有人要求在我们的网站上注册,但此地址已注册”电子邮件。

到目前为止的答案都很好,但重要的是要注意,从分析的角度来看 - 我不在乎我是否没有进入他们的帐户,但他们使用服务的知识足以对情况进行社会工程/监控他们的社交信息源以获取潜在密码(宠物、孩子、汽车等)。

话虽如此,在用户注册期间,向用户解释电子邮件地址可能已被使用或未使用,这将是一个糟糕的 UX 举措(或至少是一个雷区)。你可以想出一些时髦的逻辑,让他们重新创建一个帐户并通过电子邮件向他们发送“嘿,看起来你已经有一个帐户”,但这很笨拙,坦率地说,这对用户来说是浪费时间。登录页面也是如此 - 无论是有帐户还是没有帐户,“无效用户/通行证”都是一个好习惯......但是当注册页面免费提供该信息时,如果用户认为他们会感到恼火,您就会冒着被激怒的风险已经注册但还没有。

就个人而言,我尝试尽可能多地使用基于 Web 的服务的 OpenID,以防止这种情况发生。这些天我们都有一个谷歌/脸书/推特帐户……

所以我想作为入门,我们需要考虑如果您以某种易于访问的方式确认/否认系统上存在电子邮件,攻击者实际上可以做什么。这是一种可能的情况:

  • 攻击者已获得对受感染电子邮件地址 + 密码数据库的访问权限。(即他们可以登录任何这些用户的电子邮件)
  • 他们希望访问您服务上的某些用户帐户。
  • 您的服务将确认或拒绝是否存在具有电子邮件地址的帐户。

在这种情况下,他们可以简单地根据您的密码重置功能尝试他们数据库中的所有电子邮件,收集返回的结果,如果您确认其中任何一个存在,请登录这些电子邮件并点击密码重置链接。

如果遵循注册过程很容易,那么假设密码重置不透明并没有增加安全性是正确的。他们可以在注册页面而不是密码重置页面上简单地执行上述攻击。

我能想到的一些减轻这种情况的方法是:

  • 强制用户使用用户名注册或在注册时为其分配用户名,并让他们从那时起使用该用户名而不是他们的电子邮件地址。
  • 在他们单击电子邮件确认之前,不要让他们登录。这样,如果有人尝试使用已注册的电子邮件进行注册,只需说“我们已向您的电子邮件地址发送了一封确认电子邮件,单击它即可登录”
  • 尝试在可以确认/拒绝电子邮件地址存在的页面上实施某种反暴力方法,例如验证码。

然而,如前所述,这两者都相对显着影响可用性。与往常一样,安全性始终是实用性和偏执之间的权衡。