如果域 A 有域 B 的 iframe,而域 B 有域 A 的 iframe,域 A 可以访问域 B 的 cookie 吗?

Posted

技术标签:

【中文标题】如果域 A 有域 B 的 iframe,而域 B 有域 A 的 iframe,域 A 可以访问域 B 的 cookie 吗?【英文标题】:If domain A has an iframe of domain B, which has an iframe of domain A, can domain A access the cookies of domain B? 【发布时间】:2012-03-04 05:47:46 【问题描述】:

我记得读过关于域 A 能够控制域 B 如果域 B 中有一个辅助框架。我有像 StumbleUpon 这样的页面,我将其他网站放在 iframe 中。如果其中一个网站将我的页面放在 iframe 中怎么办?此外,像 Facebook 的 Like 按钮和 Twitter 的 Tweet 按钮都是 iframe。哪些数据将/不会访问? 他们能否将脚本注入我的页面?

【问题讨论】:

使用 iframe 对 cookie SOP 模型没有影响。但是,如果您的站点可以被 iframe 嵌入到其他人的站点,您可能需要考虑如何解决clickjacking 攻击。 owasp.org/index.php/Clickjacking 【参考方案1】:

您的网站无法访问 iframe 中的其他域,而该其他域也无法访问您的网站。但是,如果 iframe 与父级在同一域下,则可以通过 javascript 访问它。

在此处阅读更多信息:http://pipwerks.com/2008/11/30/iframes-and-cross-domain-security-part-2/

编辑:这里有一些更好的阅读http://javascript.info/tutorial/same-origin-security-policy

Edit2:关于您对 Facebook 赞按钮等的问题。这取决于您如何将赞按钮添加到您的页面。如果您通过内联 javascript 添加它,则 javascript 将可以访问您网站上的所有内容。但是,如果它只是插入到文档中的 iframe,它将无法访问您页面上的任何内容

【讨论】:

【参考方案2】:

不,Same-Origin Policy 禁止访问:除非两个文档具有相同的来源(基本上相同的协议、主机和 URL 中的端口号),否则在来源中运行的脚本无法访问另一个文档的 DOM,除非它位于相同的来源.

但这些“社交插件”通常是通过从其服务器加载外部脚本来嵌入的。在这种情况下,外部脚本会被加载,然后在您的页面源中执行。所以同源政策不适用。在这种情况下,这些脚本将能够访问 JavaScript 可访问的任何 cookie(即没有 HttpOnly 标志)。

【讨论】:

【参考方案3】:

,他们无法访问其他域的cookie。

无论您将具有不同域的 iframe 隐藏在何处,浏览器都会始终发送为该特定域设置的 cookie。

Like 按钮可以使用Referer header 创建。

说,http://domainA.com/index.html 包含

 <iframe src="http://domainB.com/like.html"></iframe>

在这里,当在 iframe 中调用 http://domainB.com/like.html 时,会随请求一起发送 HTTP 标头 Referer: http://domainA.com/index.html。这样domainB.com/like.html 总是知道谁在请求。当domainB.com 得到这个小信息时,它可以检查页面的点赞数并显示结果。

一个活生生的例子

将以下代码放入您的任何网站。之后,每次您刷新网站时,它都会显示其加载次数。它会计算点击次数。

 <p>This page is viewd 
 <iframe 
      src="http://tools.cmyweb.net/hitcounter.php" 
      frameborder="0" 
      scrolling="no" 
       
       
 />1</iframe> times</p>

【讨论】:

【参考方案4】:

这不会解决您的问题。仅仅因为他们嵌入了您网站的 iframe,并不意味着您的网站可以更好地访问其他网站中的 cookie、脚本等。

【讨论】:

以上是关于如果域 A 有域 B 的 iframe,而域 B 有域 A 的 iframe,域 A 可以访问域 B 的 cookie 吗?的主要内容,如果未能解决你的问题,请参考以下文章

iframe跨域动态设置主窗口宽高

iframe与主框架跨域相互访问方法

Cookie中的domain与path属性详解

虚拟机克隆系统

JS跨域访问操作iframe里的dom

iframe与主框架跨域相互访问方法