在我网站上使用OpenID作为身份验证方法是否存在安全风险?

22

OpenID 是一个安全的网站用户身份验证方法吗?

如果不是,使用 OpenID 存在哪些安全风险?

9个回答

10

我同意大卫所提出的许多观点,因此在这里只是为了辩论而提出一些观点。

对于有知识的用户,我认为OpenID是比许多网站提供的认证方式更安全的。现在让我来解释一下我的说法。首先,什么是“有知识的用户”?我将定义这样的人为那些意识到OpenID的弱点并采取措施来减轻这些弱点的人:

  • 如果他们不希望网站能够有效地跟踪他们,他们会维护多个身份。
  • 在需要24/7访问的网站上注册两个或更多个OpenID提供者。
  • 始终直接登录他们的OpenID提供者。他们永远不会登录到第三方网站重定向到的页面。

许多网站不知道如何安全地维护用户密码。 OpenID的真正好处在于,可以选择我的OpenID提供者和登录依赖方所需的认证级别。例如,我可以选择委托认证给VerisignTrustbearer - 它们都提供比网络上的大多数网站更强的认证技术。我更愿意相信专门从事安全领域的组织来保护我的密码,而不是在网络上随机的某个网站。因此,我认为对于有知识的用户而言,OpenID 可以比每个网站实现其自己的认证系统更加安全。

尽管如此,大多数用户并不了解OpenID固有的风险因素,并且不会采取措施来减轻这些风险。


7

其实,我一直不喜欢OpenID,因为有许多原因。

  • 我必须信任提供我数据的OpenID提供者。我确实对某些网站抱有一定程度的信任,但只是因为我信任Stack Overflow,并不意味着我自动信任任何著名的OpenID提供者。

  • 如果我的OpenID密码被盗,那么我所使用OpenID登录的所有网站都会受到影响。通常情况下,我会为每个网站选择不同的密码,但在使用OpenID时我不能这样做。

  • 我根本不喜欢Persona的概念。即使在发送任何数据之前我都会被询问,但只是一个提供者拥有这些信息,其他服务可以请求它,这似乎并不合理。好吧,如果我不喜欢可以不用,但这个概念对我来说有缺陷。

  • 正如已经提到的,数据在网站和OpenID提供者之间来回传输。无论何时交换数据,都可能遭受攻击。没有任何系统是100%安全的,甚至包括SSL(HTTPS)。如果数据只在我和一个网站之间来回传输,与同时还要在两个网站之间来回传输是有区别的。

  • 如果OpenID提供者被黑客攻击,并且黑客获取了所有用户的登录数据(毕竟,这些数据集中在一个地方),那么影响将会非常严重!

以上仅是其中一部分原因。我也看不出使用OpenID的巨大优势。对于用户而言,他们说:

  1. 更快更容易的注册和登录
    • 减少由于忘记用户名/密码而带来的沮丧
    • 保持在首选网站上的个人数据最新
    • 最小化密码安全风险

好吧,让我们分析一下。

(1) 你每天会注册一个网页多少次?200次?如果我每周只注册2个页面,那就已经很多了。通常情况下,最多每月注册2-3个(实际上,Stack Overflow或我的OpenID提供者来使用Stack Overflow是我最后注册的一个网页,而且这不是昨天)。所以当你每月只注册2个网站时,你没有5分钟填写一个表格吗?别开玩笑了。

(2) 怎么做到的?因为它在所有地方使用相同的密码?“这不是未来,这是一个漏洞” ,大多数安全专家会这样说。或者因为它允许我通过邮件恢复密码?嗯,实际上,我使用的几乎所有网站都允许我这样做。尽管如此,我的Firefox非常好地记住了我的密码,将它们加密存储在磁盘上(使用主密码),并且这个加密数据库定期备份,以防丢失。

(3) 嗯,这可能是一件好事情……然而,我的名字到目前为止从未改变过,我的电子邮件地址也不会改变,因为它是我使用的域之一,并转发到真实地址(所以真实地址可以更改,我只需更新转发即可,一切都像以前一样运作)。我的街道地址呢?嗯,有些人经常搬家。我迄今为止只搬过一次家。然而,大多数网站并不需要知道我的街道地址。对于那些要求我填写这些信息以注册但我看不出有必要让别人知道这些信息的网站,我就会提供虚假信息。在整个互联网上,只有极少数网站知道我的真实地址(实际上只有那些可能需要给我寄信或者我可能会在那里订购商品的网站)。
(4) 实际上,我认为情况恰恰相反。这将最大化安全风险。它怎么会减小风险呢?

9
如果您在访问每个站点时都使用不同的密码,那么您已经领先了游戏,并且OpenID对您的帮助较小。大多数用户没有这样做,所以每次注册新站点时,他们都会向所有其他站点泄露密码。另请参见http://blog.wachob.com/2007/01/openid_is_a_pla.html - keturn
7
对于每个反驳观点的回应:1)它主要是时间与注册/(时间与注册+需要注册的活动所需时间)的比率。如果我想留下需要写3分钟的评论,而注册需要5分钟,那么我就不会留言。如果使用openid只需要10秒钟,则我会选择使用。 - FryGuy
5
  1. 它不会“在所有地方使用相同的密码”。OpenID消费者从未看到密码。如果我丢失了我的“通用”密码,那么我需要去每个网站重置它。我的大多数密码也存储在Firefox中,但是当我使用其他电脑时,我会忘记它们,这很麻烦。
- FryGuy
5
如果你是女性并且结婚了,你的名字可能会更改。很多人会换新的电子邮件地址。 - FryGuy
5
  1. 我认为这更适用于那些在多个网站上使用相同密码或类似密码的普通用户。如果从不向网站提供您的密码,则完全没有泄露密码的风险。另外,人们使用较不安全的密码以便记住它们,这会降低安全性。
- FryGuy
显示剩余2条评论

6

OpenID本质上是不安全的。它的工作原理是您的网站将用户重定向到其OpenID提供商网站,然后接受来自该网站的ID。这在两个方向上都存在不安全性。您必须信任返回的ID(因为您无法自己验证用户),而且很容易操作代理到用户的OpenID提供商,从而允许您窃取他们的用户名和密码。

对于像Stack Overflow这样的东西,OpenID就很好,因为如果有人冒充你并不重要。但对于内容更加严肃的网站来说,使用OpenID非常危险。例如,如果您将OpenID用于电子邮件,则任何窃取您的ID的人都可以访问您的电子邮件。然后,他们可以向您使用的其他网站发送密码提示请求,以获取这些网站的密码。在最坏的情况下,您可能会将OpenID用于银行账户,或者有一家银行会向您的电子邮件帐户发送密码提示...

OpenID还存在许多其他安全问题。您可以在"互联网隐私"中找到更多信息。


1
你发这个帖子是为了自问自答吗? - Omar Kooheji
1
@Omar,就像Rich B所说的那样,是的,我做到了。这个问题还没有被问到,而网站的“规则”允许回答自己的问题作为扩大网站知识覆盖范围的一种方式。请阅读FAQ以获取详细信息。 - David Arno
@David,正如我所说,如果StackOverflow上的任何人要求我的信用卡,我会对这个请求怀疑。:-) 正如我所说,我确实理解你的观点。但是,OpenID真的比可以被欺骗的任何其他网站更不安全吗?网络钓鱼和欺骗早在OpenID之前就已经存在了。 - Onorio Catenacci
@Onorio,说得好。我只是想让你看到我对OpenId问题的更全面描述,希望你会欣赏。 - David Arno
3
你的回答过于笼统,没有回答你自己的问题!与用户在你自己的网站登录表单中直接输入ID相比,接受第三方网站的ID存在哪些不安全性?如果要操作代理服务器窃取他们的用户名和密码,又该如何避免在浏览器地址栏中显示代理服务器的URL? 然后你提供的“许多其他问题”链接重定向到了完全无关的网站主页。 - Davide
@Davide 但是大多数人不会检查浏览器地址栏中的URL? - KajMagnus

4
OpenID 会添加另一个需要被视为可信组件的认证方。这在某种程度上与允许通过电子邮件进行账户恢复的任何应用程序非常相似,但是您可以选择仅通过经过验证的 HTTPS 连接与 OpenID 提供者通信,而不是以明文方式传输电子邮件消息。
请查看规范中的 安全注意事项 部分。
有关 OpenID 弱点的出色描述以及展示了良好的 OpenID 提供商如何提供比传统易受网络钓鱼密码更加安全的体验,请参见 Kim Cameron 的 这段简短视频,来自他的 Identity Weblog

2

如果您选择忽略不支持 HTTPS 的所有 OpenID 提供程序,可以使 OpenID 更安全。


如果您使用Gmail的两步验证,那么它将非常非常安全(?) - KajMagnus

2
我认为大多数OpenId提供商的主要弱点是他们通过电子邮件提供密码恢复。这降低了OpenId的安全性,使其取决于我的电子邮件提供商的安全性。如果有人能够访问我的电子邮件帐户,他就可以有效地窃取我的身份(有或没有OpenId)。
使用OpenId进行身份验证只会使窃取我的身份更加容易。只需访问我的电子邮件帐户并重置我的OpenId密码即可。不需要其他操作(而不是100个密码重置请求,每个Web上的帐户一个)。
更糟糕的是,如果攻击者更改了我的电子邮件帐户密码,那么我将很难证明我是该OpenId帐户的原始所有者。攻击者可能会将相关联的电子邮件帐户更改为自己的帐户,因此即使我稍后重新获得了我的电子邮件帐户,也无法重置密码。
仅获取OpenId提供商发送的密码恢复电子邮件可能就足以窃取我的身份。
OpenId提供商必须提供禁用电子邮件密码恢复并提供更安全的找回丢失密码的方式。这些方法可以基于邮政地址、护照或银行帐户等(这些我比电子邮件帐户更信任)。
只要通过访问单个电子邮件就可以接管OpenId帐户,它就不过是另一个单点故障而已。
另请参见:http://danielmiessler.com/blog/from-password-reset-mechanisms-to-openid-a-brief-discussion-of-online-password-security ,其中也提到了“最薄弱的环节:电子邮件密码重置机制”。

1
虽然这篇文章很旧了,但我想补充我的看法。我认为OpenId有一个缺陷,似乎没有人关心。当我使用Yahoo进行身份验证时,它实际上会将我登录到Yahoo。它不应该让你登录到Yahoo,而只应该验证您是否具有适当的Yahoo凭据。当您从我的应用程序注销时,您仍然登录到Yahoo。如果您离开共享计算机,另一个人去Yahoo,您将被登录..因为当您使用Yahoo进行身份验证时,他们也会将您登录到他们的服务中。他们应该只是验证您的身份,而不是让您登录。我已经告诉过几个人这个问题,甚至在stackoverflow.com上演示过(他们的注销机制很糟糕,当我点击注销时,我希望被注销,而不是请再点击一次注销按钮)。尝试注销Yahoo或Gmail。关闭所有选项卡,然后使用Yahoo/Gmail登录到stackoverflow。然后注销stack overflow..(确保您点击两次注销)..现在浏览到Yahoo或Gmail,您已登录。现在我得到的嘲笑回答是“不要使用共享计算机,您应该注销Yahoo/gmail等”...并不是每个人都是具有MIS或计算机科学学位的开发人员,我的岳母会认为当她注销Stackoverflow时,她不会仍然登录到Yahoo..也许我错过了一些参数或其他东西,可以强制实现我想要的内容,但它肯定不在告诉您OpenId有多好的文档中!

如果您在登录了Gmail或Yahoo的共享计算机上离开,无论是否使用OpenId,您都可能会遇到问题。 - jmoreno

0

哎呀,MyOpenID 报告未经确认的电子邮件地址,我刚刚测试了一下。看起来只有像 Google/Yahoo 和其他几个手动白名单提供商才应该信任电子邮件信息。如果有人感兴趣,我会在这里链接代码。


是的,我认为通常情况下,我们需要验证 OpenID 邮箱地址,就像用户创建“普通”的登录名和密码账户一样。 - KajMagnus

-1

我喜欢Verisign的VIP访问,网站可以利用它,而且有一个不错的iPhone应用程序,可以让你生成令牌以便进入,就像secureID一样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接