默认隐藏注册时的“电子邮件已被使用”提示

背景

在当前的默认设置下,当使用已注册的电子邮件注册帐户时,注册表单会告知用户此情况:

我们将默认设置更改为不提供此信息。相反,无论电子邮件是否已注册,注册表单都将显示如下:

这也会以类似的方式影响密码重置。禁用该设置后,表单会立即反馈电子邮件存在于系统中:

启用该设置后,它不会透露该信息:

我们为什么要更改它?

恶意行为者可以利用此反馈执行帐户枚举,让他们知道此论坛上是否存在某些用户,然后他们可以针对这些用户进行网络钓鱼攻击。

这不会对合法用户产生负面影响吗?

这种情况是,如果用户忘记了他们已经拥有一个帐户,并且他们尝试使用相同的电子邮件注册或重置密码,这种情况相对罕见。但即便如此,他们也会收到一封电子邮件,告知他们已拥有帐户。

最终,此更改不会影响合法用户注册或访问其帐户的能力。

但我更喜欢旧的默认设置

如果您在任何时候更改了此设置,新的默认设置将不会覆盖自定义设置。如果您想改回旧的默认设置,可以将 hide_email_address_taken 设置改回 false

注意:我们正在考虑将来将此站点设置隐藏在管理员设置页面中。

10 个赞

如果用户记错自己注册时使用的电子邮件地址,会发生什么情况?
例如,假设用户认为他们注册的电子邮件地址是 example@gmail.com,但实际上他们注册的是 example@yahoo.com。他们会尝试使用 example@gmail.com 这个电子邮件地址重置密码,但该电子邮件地址下不存在任何账户。

如果有与 ted@discourse.org 匹配的账户,您将很快收到一封包含如何重置密码的说明电子邮件。
在这种情况下,如果用户根本没有收到电子邮件,他们将永远不知道自己提供了错误的电子邮件地址,也不知道何时/是否应该尝试使用其他电子邮件地址。
相反,消息应该只显示“您将很快收到一封包含如何重置密码的说明电子邮件”,而用户应该收到一封解释“有人请求重置 example@gmail.com 的密码,但该电子邮件地址下不存在任何账户。”的电子邮件。
这不会允许任何人进行账户枚举,但它 允许用户知道他们提交了错误的电子邮件地址,并尝试使用其他地址。

5 个赞

这种方法的问題在于,它允许恶意行为者向从未与您的实例交互过或不存在的地址发送电子邮件。

这可能导致发送的电子邮件数量大大增加,可能产生高昂的经济成本。这也可能导致用户举报垃圾邮件的数量大幅增加,以及更高的退回率,可能导致像 Gmail 这样的运营商将您的电子邮件列入黑名单。

5 个赞

攻击者可以通过注册新账户来做到这一点。如果攻击者知道 100,000 个电子邮件地址,他们可以注册 100,000 个账户,Discourse 会向每个账户发送一个激活电子邮件,每个用户都可以将其报告为垃圾邮件。

向不存在账户的电子邮件地址发送“无法重置密码,您的账户不存在”的电子邮件,并不会让该攻击更容易或更困难。

此攻击对大多数网站来说都不是问题,但如果你担心它,应该使用 Discourse hCaptcha 插件,这会增加攻击者的成本。(Meta 不使用它;Discourse 托管的大多数论坛都不使用它。)

我认为,如果 Discourse 接受我关于开始向不存在账户的电子邮件地址发送“无法重置密码,您的账户不存在”电子邮件的建议,那么 hCaptcha 插件在密码重置表单和注册表单上都能正常工作将是有意义的。(我仍然不需要/不使用 hCaptcha。)

3 个赞

是的,这是有效的。我只考虑了它本身的情况,而没有考虑到其他已经可能发生但实际上完全无法阻止的领域。

他们不知道吗?

  1. 我忘记了密码,想访问这个网站。我输入了我认为正确的电子邮件。
  2. 我没有收到密码重置链接。

所以现在我自动知道两种选择之一:一、我输入了错误的电子邮件,或者二、网站没有正常工作。
我的选择现在是:尝试另一个电子邮件,或者尝试联系网站的管理员。
现在根据你的建议,我会收到一封电子邮件,告诉我该帐户不存在。我的选择是尝试另一个电子邮件,或者联系网站的管理员。它与终点相同,没有多余的步骤。

1 个赞

但……大多数普通用户不会那样想,或者根本不那样想。

1 个赞