假设我创建了一个像StackOverFlow这样的网站并决定使用OpenID.什么是阻止我或其他任何人对网络钓鱼进行网络钓鱼?也就是说,你怎么能真正知道任何网站都在使用OpenID而不是假装?你如何保护自己免受这种伤害?
对此进行扩展,假设有一个站点确实破坏了您的openID凭据,他们是否无法使用openID(全局密码破解)在其他所有站点上使用它?那么你的openID的安全性是否只会与最弱的网站/提供商一样强大?
您输入的只是ID,没有密码.该ID是公开的,因此"网络钓鱼"不是安全漏洞.有些提供商甚至为所有用户使用相同的ID,例如,Google帐户的ID始终是https://www.google.com/accounts/o8/id
.有关更详细的说明,请参阅Wikipedia文章.
对于对OpenID如何工作知之甚少的用户,您可以创建一些欺骗页面,这些页面看起来像是他们的OpenID所针对的网站(例如,任何处理OpenID的免费电子邮件提供商).如果他们在填写用户名和密码之前忘记检查他们所在的域名,那么evildomain现在拥有他们的OpenID用户名和密码.
在服务器端,您依靠外部站点进行身份验证.因此,如果提供商XYZ的OpenID身份验证表单中存在一个漏洞,允许密码"箭鱼"在任何帐户上运行,那么任何人都可以在任何接受OpenID的地方模拟该提供商的用户.
allesklar提出了一个很好的观点,我输入的内容非常适合我的最后一点:如果你混合本地和远程用户,你突然需要两个禁令列表而不是一个; 人们设置的"坏"OpenID提供商的第二个禁令列表,用于创建批量帐户......或者自动授权给予他们任何帐户名称的帐户.
当有人在您的站点上输入一个开放ID时,如果该用户可以,则通过询问该用户的OpenID所在的站点(以及该站点)来验证该用户.例如,AOL无法验证Yahoo OpenID.
如果用户尚未在该站点进行身份验证,则身份验证将失败,您需要重定向到该站点的登录页面.真正的身份验证仍然需要发生,但它总是发生在该用户的OpenID提供程序中.作为用户,您受到保护,因为您应该只看到您熟悉的登录页面.恶意网站将很难抽取OpenID凭据,因为用户永远不会直接向这些网站提供密码.
一旦用户通过其提供商进行身份验证(或者他们是从一开始就进行身份验证),提供商就会将此报告给您的网站.OpenID的哪些变化是您的网站现在需要信任某些其他网站 - 他们将准确报告其用户的状态.
有人可以设置一个"恶意"开放ID提供程序,并试图以这种方式浏览新的ID,但这是在用户和提供者之间.由于这种认证完全与声誉有关,因此我们的想法是,这样的提供商不会长期保持业务.如果不出意外,网站可以将这些提供商列入黑名单 恶意提供程序无法模拟向其他提供程序注册的开放ID.
恶意提供程序的另一种可能性是设置一个OpenID服务,该服务只是始终确认传递给它的任何id进行身份验证(或允许管理员为其用户设置后门).但是,这只会影响在该提供商处注册的用户.再一次,网站可以将这些提供商列入黑名单,并且由于他们依靠声誉,不会长期保持业务的想法仍然存在.