好的,基本上这里是 Bodysnatcher OpenId Provider 攻击场景。
Bob 的 Google 声明标识符如下,ttps://www.google.com/accounts/o8/id?id=AAtawkQvytyBNNuHpRhn36f8MLvFiJvZg8teNE
Jane 知道如何找到 Bob 的“当前”声明标识符。
她离开并在这里创建了自己的 OpenId 提供程序 www.jane.com/accounts/o8/id,这样当被询问时它将返回 Bob 声称的标识符。
她访问了一个编码错误的网站 www.bcs.com,该网站使用开放 ID,而 bob 有一个帐户。
她告诉 www.bcs.com 使用 OpenId Provider www.jane.com/accounts/o8/id。
现在这是我不知道的部分,并且想知道它是否可能/现实...... www.jane.com/id 一些如何让 www.bcs.com 相信声称的标识符“字符串”(即站点最终将看到的值)是 ttps://www.google.com/accounts/o8/id?id=AAtawkQvytyBNNuHpRhn36f8MLvFiJvZg8teNE。
即使主机是www.jane.com,是否有可能?
我们正在努力实施 OpenId,我们不想成为那个“编码错误的网站”。我们正在使用一些第三方 .NET 库,它为我们提供声明的标识符,因此我们不确定它在哪里或如何构建它。如果它可能是伪造的,那么我们正在考虑进行一些检查,以确保提供者 OpenId 的 url 与声明标识符中的内容匹配。
这也引发了我们是否应该采取额外步骤对我们声明的标识符进行散列/加扰的担忧。我们认为是这样,因为 Google 会根据请求 OpenId 的站点更改其标识符。我的意思是,如果不尝试保护其成员,为什么还要麻烦这样做呢?