为什么我可以使用拼写错误的电子邮件/密码登录我的 Facebook 帐户?

信息安全 验证 账户安全 Facebook
2021-08-27 21:24:01

我最近一直在网上玩不同的登录表单,看看它们是如何工作的。其中之一是 Facebook 登录表单。当我退出我的帐户时,我的电子邮件和密码由我的浏览器自动完成。然后我决定拼错我的电子邮件,看看如果我尝试登录会发生什么。

example@gmail.com令我惊讶的是,在将电子邮件从 更改为后,我登录没有问题example@gmail.comm然后我开始尝试不同的拼写错误,只要它离我的真实电子邮件不太远,我就可以登录。我也尝试更改域名example@gmadil.coom,我的电子邮件前缀ezfxample@gmail.com等。

然后我也尝试拼错我的密码,只要它与我的真实密码相差不远,我就可以登录没有问题(使用密码在真实密码之前或之后添加一个随机字母时有效,但在添加字母时无效在它的中间)。

我还通过在 Chrome DevTools 中查看请求中发送的实际数据来检查它,实际上它是发送的错误数据。

怎么会这样?我应该担心我的帐户安全吗?

3个回答

Facebook 允许您犯一些错误以简化登录过程。一位 Facebook 工程师在一次会议上解释了这一过程它的要点是 Facebook 将尝试对您提交的输入进行各种排列,并查看它们是否与数据库中的哈希匹配。

例如,如果您的密码是“myRealPassword!” 但您提交“MYrEALpassword!” (大写锁定,移位反转大写锁定)。提交的密码显然与他们存储在数据库中的密码不匹配。Facebook 并没有完全拒绝你,而是试图通过“纠正”一些常见错误来提升用户体验,例如在之前或之后插入随机字符、大写(或不大写)第一个字符或错误地使用大写锁定。Facebook 会一一应用这些过滤器,并根据他们在数据库中散列的内容检查新“更正”的密码。如果其中一个排列匹配,Facebook 会假设您只是犯了一个小错误并授权您的会话。

乍一看令人担忧,但由于某些原因,这实际上仍然非常安全。首先,Facebook 能够在不以明文形式存储密码的情况下做到这一点,因为他们正在转换表单字段中提供的(和不受信任的)输入并检查它是否匹配。其次,这对于试图暴力破解密码的人来说不是很有帮助,因为由于速率限制和验证码,在线攻击几乎是不可能的。最后,攻击者/邪恶配偶知道您的密码文本而不是大小写的可能性非常小,因此此功能产生的风险同样小。

你应该担心吗?不,可能不是。

进一步阅读:https ://www.howtogeek.com/402761/facebook-fudges-your-password-for-your-convenience/

众所周知,Facebook 允许您故意将密码大小写颠倒或首字母大写(参见本文)登录。他们这样做的同时只存储了一个散列密码。您是否看到允许更多差异?

显然,他们对电子邮件地址也有一些类似的可用性功能。将 gmail.comm 自动“更正”为 gmail.com 实际上是无害的,因为(当前)没有 comm tld,因此实际上没有人会拥有有效的 gmail.comm 电子邮件地址。然而,我很惊讶他们会允许 gmadil.com(目前正在出售)或不同的用户名,因为这可能是其他人的电子邮件地址。

他们可能已经决定可用性是绝对重要的,如果尝试登录一个没有帐户的电子邮件地址,则会自动尝试使用最相似的用户名登录,但是 - 虽然不是完全错误 - 它这似乎不是一个好方法,因为其他人明天可以使用ezfxample@gmail.com电子邮件注册,虽然不太可能,但也可以Password123用作密码,然后呢?

更新:几年前,Lukas 已经在“纠正拼写错误的用户名会产生安全风险吗?”上对此进行了测试。显然,只有当您没有从之前的会话中删除 Facebook cookie 时,使用拼写错误的电子邮件地址才能登录。因此,它只会在知道您曾经以 example@gmail.com 身份登录时自动更正您的电子邮件地址,否则会失败。

注意:另一位用户早些时候曾建议 cookie 可能在其中发挥了作用,但现在它已在一个已删除的答案中。

如果您将登录过程视为一个整体,此措施实际上可以提高安全性。该站点没有授予用户多次登录尝试来手动修复常见的拼写错误,而是尝试自动修复这些拼写错误。结果,用户需要的平均登录尝试次数下降,这意味着对尝试各种常见密码的攻击者进行更严格的速率限制,而不是相同密码的轻微变化。