Google+ +1小部件如何从它们的iframe中跳出?

145

不知何故,将鼠标悬停在Google+的+1小部件上会出现一个工具提示类型的东西,明显比其所包含的<iframe>元素要大。我已经检查了DOM以确认这一点。*

iframe boundaries

所以:

  1. 什么?怎么回事?

  2. 如果被恶意使用,这难道不是点击劫持的巨大机会吗?(想象一下有人针对这些社交小部件进行MITM攻击!)

*更新:我看到的是提示信息位于第二个动态创建的iframe中。

2个回答

181

Google +1小部件是在您的网站上运行的JavaScript代码,用于构建一个iframe。此JavaScript小部件在您的网站上下文中运行,因此不受iframe源继承规则限制。因此,即使它看起来只是一个简单的iframe,该JavaScript小部件也可以对父站点设置任何DOM事件。

那么,为什么谷歌要使用iframe呢?为什么不在页面上生成一个div?因为链接源自iframe,可以在请求中嵌入CSRF(跨站请求伪造)令牌,而父站点无法读取此令牌并伪造请求。因此,iframe是一种反CSRF措施,依赖于源继承规则来保护自己免受恶意父级的攻击。

从攻击角度来看,这更像是XSS(跨站脚本)而不是UI-Redress。您正在向谷歌授权访问您的网站,他们可以劫持您用户的cookie或对您的网站执行XmlHttpRequests操作,但如果他们这样做,人们会起诉他们是恶意和富有的。

在这种情况下,您必须信任谷歌,但谷歌不信任您。

有几种方法可以缓解这些网络漏洞对隐私的影响


很棒的东西 - 我感谢你关于XSS的评论,这很有道理。然而,我仍然不确定某些事情。问题中的内容似乎不在<iframe>内,你建议这可能是真的(并解释了如何可能)。但是从检查DOM来看,似乎并非如此。如果没有包含在第二个iframe中,它将会暴露我的姓名和Gmail地址给恶意的攻击者! - Alan H.
3
如果您点击+1按钮,您将进入添加评论的窗口。他们正在使用动态iframe进行一些奇怪的操作。如果您加载Firebug并检查该元素,您将获得一个包含提交到Google+的CSRF令牌的iframe src plusone.google.com/u/0/_/+/fastbutton?url=... - rook
在某些情况下,您可以通过使用httponly设置Cookie来避免Cookie被劫持。 - seppo0010
1
@seppo0010 是的,但这并不能阻止XHR。 - rook

3

正如Rook在他的回答中所解释的那样,<iframe>用于防止使用Google +1小部件代码的网站自己点击链接(从而人工提高网站的+1评分)进行CSRF攻击。这就是Google不信任你的地方。 - Mikko Rantalainen

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