从安全的角度来看,OAuth、OpenID、Facebook Connect 等不是很疯狂吗?

信息安全 验证 密码 打开ID oauth
2021-08-17 12:33:42

我一直在使用 API,并且与坚持认为 OAuth、OpenID 等远优于自制方法的 Web 开发人员一起工作。现在似乎每个站点都在使用这些,以方便用户使用,同时也是为了安全。我几乎每天都听到它更安全,但我发现这非常难以置信,原因如下:

  1. 如果黑客以某种方式获取了您访问某个站点的密码,他就知道可以访问您现在访问的大多数站点。

  2. 它使网络钓鱼变得容易 10 倍。有这么多人使用相同的登录名并重复一遍,人们不太可能真正阅读所有内容并检查顶部的 URL。

您能否列出更多不安全的原因,或者您能否向我解释为什么它更安全?我不明白您为什么要忍受集成其中一个的麻烦,因为用户似乎可以在 3 个字段(用户名、密码、电子邮件)中输入而不是单击服务徽标登录(Twitter、Google、 FB 等),输入他们的用户名/密码,点击提交,点击批准。

==更新==

根据要求扩展我的问题。

对于我上面的两点,#1,黑客如何获得它并不重要。我不确定如何准确地扩展它。你可以暴力破解它,猜测它,使用忘记的密码并对常见问题进行字典攻击等。但无论你怎么做,我的观点是,访问 1000 个服务器的 1 个密码远不如访问 1000 个不同服务器的 1000 个密码安全网站。我个人可以猜出我的一些朋友和家人的密码,并且可以访问各种帐户。我什至不必去找他们。当我浏览网页时,我只是登录...如果我是一名黑客,其中许多密码很容易破解。我朋友的一些密码是,,pepsitina然后是出生年份)123456,,和其他愚蠢的密码。不过我最喜欢的是tomcruisesucks大声笑。

对于第 2点,为了进一步扩展,我可能会访问http : //wired.com、http ://klout.com、http : //twitter.com、http : //thenextweb.com,它们都有 Twitter登录。我信任这些网站(在大多数情况下),所以老实说,我不再检查用于登录的弹出窗口的 URL,而且我认为大多数人不会。该弹出窗口可能很容易被黑客入侵他们的一台服务器,或一个邪恶的员工,或者只是一个机器人通过 twitter 发送给人们的虚假应用程序站点,然后多人登录到这个虚假应用程序,但使用推特登录。

人们已经习惯了看到他们不再看的相同登录页面如果这个帖子足够流行,我可以很容易地在 Twitter 或 FB 上做一个超级简单的测试,方法是向每个人发送一个虚假应用程序的链接,有一个看起来像 Twitter 或 FB 的弹出窗口,他们就会登录。我保证。如果我让登录屏幕转到http://bankofamerica.comhttp://paypal.com,他们会问自己为什么我在这里,他们为什么需要这些信息等。使用的相同网站在实践中一遍又一遍地登录是非常糟糕的。

这是我的扩展讨论点;)

4个回答

我想对于日常网站没有真正好的解决方案(例如,不是用户接受的高知名度网站,例如银行,并且经济允许两因素身份验证)。只能选择一种负面影响尽可能小的解决方案。

不幸的是,人们不擅长记住大量密码。这导致他们要么在不同的服务上重复使用相同的密码,要么将它们写下来(在纸上或密码管理器上)。是的,建议创建一个包含站点名称的密码系统。

但是人很懒惰。密码重用比中央帐户更糟糕,因为这意味着任何应用程序中的漏洞都会泄露密码。

Stendhal游戏中,大多数帐户黑客都是由家庭成员完成的。我想这对于游戏来说是特别的。下一组是随机猜测用户名/密码。但是有少量的黑客尝试是基于获得对电子邮件帐户的访问权限。虽然我们不允许使用电子邮件自动重置密码,但许多网站都允许。Twitter 的高层管理人员利用过期的 Hotmail 电子邮件帐户和重复使用的密码被黑客入侵。

因此,如果您考虑允许通过电子邮件重置密码,则将身份验证过程委托给大公司几乎没有额外的风险。他们都采取了适当的措施来使攻击者更加难以攻击(通过手机消息恢复可疑活动、登录历史记录、来自其他县的登录尝试警告等)。在您自己的站点中实施这些工作需要做很多工作。

就个人而言,我更喜欢客户经理方法(规范)而不是信任其中一家公司。另外,它没有网络钓鱼问题。不幸的是,该项目似乎没有取得任何进展。

最后,我们决定让 Stendhal 同时支持 OpenID 和本地帐户,并让用户决定。

从安全的角度来看,拥有一个久经考验的机制几乎总是比自己动手要好。实施错误是破坏良好安全概念的最常见方式之一。

从可用性的角度来看,我更喜欢 oauth,它易于使用,因此对于您的最终用户来说,这是一个巨大的好处。普通的非技术用户被公开的安全性所推迟,因此最大限度地减少对安全功能的入侵对于拥有大量用户的网站来说是一个胜利。

网络钓鱼的风险实际上并没有更大 - 人们无论如何都不会关注电子邮件的来源:-)

OAuth 等系统的好处是:

  • 世界上存储用户登录凭据的数据库更少。考虑到 Twitter 之类的服务,这意味着您的用户名和密码只有 Twitter 知道,Favstar、亚马逊、LinkedIn、纽约时报和所有其他构建在该服务之上的应用程序不知道。
  • 正如@Rory 所说,该系统已被广泛使用,并且已经过测试并(希望)在适当程度上得到了保护。

这两个好处都解决了您的第 1 点:好的,因此所有这些服务都使用相同的密码,但无论如何它们都必须使用您的 Twitter 帐户,因此最好确保不存储这些“通用”凭据在各种地方都有各种保护措施。

主要缺点与影响所有登录 UI 的缺点没有什么不同:任何人都可以制作一个看起来像这样的登录 UI,并使用它来获取您的凭据。

如果没有考虑到特定场景和威胁模型,很难回答您的问题。

但一个明显的胜利是经典的OAuth 用例事实证明,用户非常愿意为一个网站提供另一个网站的密码,例如他们在 Shelfari 等社交网站上的 Google 密码。正如 Kalsey 指出的那样,他们有时会对Shelfari 使用该密码所做的事情感到非常惊讶,而且由于Shelfari 可以完全冒充他们,谷歌无法轻易阻止滥用行为。

现在,使用 OAuth,像 Shelfari 这样的应用程序只能通过 API 获得对用户联系人数据库的部分访问权限,而 Shelfari 将使用 Google 可以轻松撤销的 API 密钥。

在现实世界中,用户很可能在多个站点上重复使用密码,因此您在 #1 中的攻击有可能在很多地方都有效。事实上,我们可以希望用户为他们重要的 OpenID 站点使用更好的密码,或者使用 2-factor auth,或其他任何方式。

至于 #2,OpenID 登录的要点是,当您注意到您在其他网站上登录时,运行一个认为您未登录的站点变得不寻常。另一方面,在没有 OpenID 或 OAuth 的情况下,让网站看起来像 twitter 并链接到该网站并希望说服人们登录并获取他们的密码已经很简单了。如果人们总是登录 Twitter(例如通过 OAuth 或 OpenID 登录其他网站),那么他们可能会问为什么他们还没有登录。