OpenID协议的电子邮件地址未经验证。
考虑以下情况:
-
我使用Gmail帐户创建了一个SO帐户,我的电子邮件是abc@gmail.com
-
现在,另一个人有办法在一些OpenID提供商那里伪造,该提供商也在使用abc@gmail.com,并且他使用此提供程序登录到SO。
-
现在,SO将连接这两种登录方法,这家伙可以完全访问我的SO帐户。
那么,在实践中,如何将上述黑客行为的风险降至最低呢?
对于您的场景,您要做几个假设:
- 中继方(在您的示例中为SO),不验证提供商,仅通过标识符(即电子邮件)识别用户
- 中继方信任任何提供商提供身份验证(例如,伪造的OpenID提供商)
为了最大限度地降低风险(这绝不是一个详尽的列表,但这是一个开始)
- 用户的OpenID至少应为(提供商+电子邮件)
- 这与OpenID的想法背道而驰,但只与受信任的提供商进行中继,而不是与任何人进行中继
- 中继方应使用nonce
- RP/OP之间的ssl
在Stack Overflow/Stack Exchange的特定情况下,只有当帐户具有相同的电子邮件地址并且用户从已知的验证电子邮件地址的服务登录时,才会合并帐户。Gmail、Facebook和Yahoo等服务会在注册过程中验证您的电子邮件地址,因此可以安全地信任他们返回的电子邮件地址。如果你使用自己的OpenID提供商,那么它将不会被识别,因此该帐户不会自动合并。