不知何故,将鼠标悬停在 Google+ plus-one 小部件上会引入一个明显大于<iframe>
包含它的元素的工具提示类型的交易。我已经检查了 DOM 以确认这一点。*
所以:
什么?如何!?
如果恶意使用,这不是点击劫持的巨大机会吗?(想象一下有人为这些社交小部件做 MITM!)
*更新:我看到的是 tooltip-y 消息是在一秒钟内,动态创建的iframe
。
不知何故,将鼠标悬停在 Google+ plus-one 小部件上会引入一个明显大于<iframe>
包含它的元素的工具提示类型的交易。我已经检查了 DOM 以确认这一点。*
所以:
什么?如何!?
如果恶意使用,这不是点击劫持的巨大机会吗?(想象一下有人为这些社交小部件做 MITM!)
*更新:我看到的是 tooltip-y 消息是在一秒钟内,动态创建的iframe
。
Google +1 小部件是在您的网站上运行的 JavaScript,它正在构建一个iframe
. 此 JavaScript 小部件在您网站的上下文中运行,因此不受iframe 的 Origin Inheritance Rules 的约束。因此,这个 JavaScript 小部件可以在父站点上设置它想要的任何 DOM 事件,即使它看起来只是一个简单的iframe
.
另一件事,为什么 Google 使用iframe
? 为什么不直接在页面上生成一个div
?好吧,因为链接源自 ,所以iframe
可以在请求中嵌入 CSRF(跨站点请求伪造)令牌,并且父站点无法读取此令牌并伪造请求。因此,这iframe
是一种反 CSRF 措施,它依赖于 Origin Inheritance 规则来保护自己免受恶意父母的侵害。
从攻击的角度来看,这更像是 XSS(跨站点脚本)而不是 UI-Redress。您正在让 Google 访问您的网站,XmlHttpRequests
如果他们愿意,他们可能会劫持您用户的 cookie 或对您的网站进行攻击(但随后人们会以恶意和富有的罪名起诉他们)。
在这种情况下,您必须信任 Google,但 Google 不信任您。
Google 使用 iFrame 来防止“泄漏的标准 DIV”。他们的闭包库对话框做同样的事情。这可能只是为了让其他内容无法渗入 +1 按钮。 http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/dialog.html。