我注意到新的 gmail 登录首先要求输入用户名,然后在要求输入密码之前确认该用户名是否存在。
这不违背传统的安全智慧,不泄露有关用户名是否存在的信息,以阻止尝试许多可能的用户名的攻击类别吗?
我假设谷歌知道他们在做什么,那么这是否意味着他们有一些方法可以防止通常被认为是漏洞的东西?
我注意到新的 gmail 登录首先要求输入用户名,然后在要求输入密码之前确认该用户名是否存在。
这不违背传统的安全智慧,不泄露有关用户名是否存在的信息,以阻止尝试许多可能的用户名的攻击类别吗?
我假设谷歌知道他们在做什么,那么这是否意味着他们有一些方法可以防止通常被认为是漏洞的东西?
对于较小的站点,您不想让黑客列举您的用户列表,但对于 Google,站点是如此之大,可以假设几乎每个人都有一个或多个帐户。因此,在普遍存在阈值之后,风险最小化。
对于大多数网站来说,不透露用户名是否存在仍然是一个好主意,但需要权衡新用户注册过程的风险。您要防止的是枚举列表的自动化过程。新的用户注册过程应该包括某种形式的延迟或门,以便脚本不能快速尝试用户字典。这通常是通过发送包含未/成功注册过程结果的电子邮件来实现的。是的,仍然可以枚举,但是有一个延迟和一个额外的步骤。
要考虑的另一件事是公共站点和私人站点之间的区别。Google 是一项公共服务,用户名也是公开的(随帐户发送的每封电子邮件一起披露)。另一方面,只有当前员工可以访问的内部公司站点是私有的,并且需要更严格的控制以防止枚举。
Jeff Atwood 在登录 Discourse 时,对这个主题有这样的看法:
这是Discourse 上长时间讨论的来源,即当用户在“忘记密码”表单中输入电子邮件地址时,向用户透露我们是否有该电子邮件地址存档是否有意义。在许多网站上,在忘记密码表单中输入电子邮件地址后,您会看到以下消息:
如果帐户与 name@example.com 匹配,您应该会收到一封电子邮件,其中包含有关如何尽快重置密码的说明。
请注意那里的腼腆“如果”,这是对所有安全隐患的对冲,即通过在忘记密码表单中输入给定电子邮件地址来揭示网站上是否存在给定电子邮件地址。
我们非常认真地为 Discourse 选择安全的默认设置,因此开箱即用,您不会被利用或滥用或被垃圾邮件发送者淹没。但是在体验了现实世界之后“我们又在这里使用了哪封电子邮件?” 我们自己在几十个 Discourse 实例上的登录状态,我们意识到,在这种特定情况下,用户友好比安全更重要。
@gmail.com
对于 Gmail,您只需向某个地址发送电子邮件即可确定帐户是否存在。如果它反弹,则该帐户不存在。
许多电子邮件提供商都是如此。在这里,用户名不被视为秘密。如果用户拥有foo@example.com
每个人都知道的电子邮件地址,那么该地址在usernamefoo
处有一个帐户。example.com
foo@example.com
然而,对于大多数其他系统来说,泄露用户名是对隐私的侵犯。如果有人发现bob@example.com
有一个帐户,nostringsattacheddating.example.org
并且 Bob 的妻子 Alice 可以尝试使用bob@example.com
网站上的用户名进行注册,并且告诉他们该用户名已经在使用中,那么这是对隐私的严重侵犯。
请记住,电子邮件地址源于电子邮件提供商。如果eve@example.com
已知在 拥有帐户,则不会丢失隐私example.com
,因为没有任何参考点eve@example.com
。对于使用电子邮件作为用户名的另一个系统,情况并非如此——mallory@example.com
在非电子邮件网站上使用用户名的用户将与mallory@example.com
在其他网站上注册的用户相同。Mallory 拥有哪些帐户需要保护隐私。
此外,泄露用户名可能对攻击者有用。这被称为用户名枚举漏洞。如果攻击者知道存在哪些用户名,那么他们就可以进行密码猜测攻击。
作为攻击者,如果我可以使用您的登录或忘记密码页面将我的列表从 10000 个目标缩小到 1000 个目标,我会的。
它还允许攻击者通过网络钓鱼攻击系统用户。
很容易设计一个无法执行用户枚举的系统。例如,注册和忘记密码的过程是一回事。
步骤是:
作为奖励,您在注册时验证了他们的电子邮件地址,以防他们日后需要重置密码。任何拼写错误都意味着用户根本无法注册——这很好,因为用户不会意外使用注册到不同电子邮件地址的帐户。
密码和注册链接都包含一个加密安全的随机 ID,因此如果没有收到电子邮件就无法跟踪它们。只有有权访问该帐户的人才能知道用户名是否已注册(Bob 最好对 Alice 保密他的电子邮件和笔记本电脑密码 - 他最好关闭任何通知声音,以防 Alice 在他们尝试此过程时尝试此过程。 '也在同一个房间)。
有关相关主题,请参阅我的其他一些答案:
我敢肯定,这条规则是在“大铁”时代发展起来的,当时所有账户都在大公司或政府系统上。由于系统分配了帐户名称,因此使用注册页面查找帐户名称不是问题。因此,保留帐户名称列表是可行且有用的。
现在我们正在处理自助注册网站,不可能对帐户名称列表保密。另外,现在有这么多人公开他们的帐户名。在这些情况下,试图隐藏失败的是名称而不是密码的事实是没有意义的。