好的,基本上,这是BodySnatcher OpenID提供商攻击方案。

  1. 鲍勃的Google声称标识符是以下内容,ttps://www.google.com/accounts/o8/id?id = aatawkqvytytybnnuhprhn36f8mlvffffffffijvzg8tene

  2. 简(Jane)有一些发现鲍勃(Bob)的“当前”声称标识符的方式。

  3. 她离开,在这里创建自己的OpenID提供商www.jane.com/accounts/o8/id,因此,当被问及时,它将返回鲍勃(Bob)声称的标识符。

  4. 她进入了一些编码不好的网站www.bcs.com,该网站使用了Open ID,并且Bob有一个帐户。

  5. 她告诉www.bcs.com使用OpenID提供商www.jane.com/accounts/o8/id。

  6. 现在,这是我不知道的部分,想知道是否可能/现实... www.jane.com/id有些让www.bcs.com相信所要求的标识符“字符串”(即站点最终将看到的价值)是ttps://www.google.com/accounts/o8/id?id = aatawkqvytytybnnuhprhn36f8mlvffffijvzg8tene。

是否有可能,即使主机是www.jane.com,有些情况如何?

我们正在努力实施OpenID,我们不想成为“编码不好的网站”。我们正在使用一些第三方.NET库,该库为我们提供了索取的标识符,因此我们不确定它在何处或如何构建它。如果有可能被伪造,那么我们正在考虑进行一些检查提供商OpenID的URL与所要求的标识符相匹配。

这也引起了人们对我们是否应该采取额外的步骤来散步/扰乱我们所主张的标识符的担忧。我们认为这是这样认为的,因为Google会根据请求OpenID的网站更改其标识符。我的意思是,如果不试图保护其成员,为什么还要解决这个问题?

有帮助吗?

解决方案

您本质上询问是否可以编写OpenID消费者的实现,该实施违反了规格以引入安全漏洞。是的。您可以省略整个验证过程,并相信用户告诉您的一切。

但是,由于遵循OpenID规范的消费者,这种攻击是不可能的。

由于您说使用.NET库,因此您可能会使用dotnetopenauth。这是Stackoverflow使用的库,您可能不必担心使用它时任何漏洞。如果您正在使用另一个库,则可能是切换到dotnetopenauth的最佳选择。

至于Google返回基于领域的标识符的原因:它是为了保护其用户的隐私而不是提高安全性。基本上,这确保您无法将用户的帐户链接到他的Google帐户。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top