为什么子帧可以重定向父帧

Why can a child redirect a parent frame?

本文关键字:重定向 为什么      更新时间:2023-09-26

我看了这两个问题,但我不明白。

从iframe操作重定向父窗口

如何防止IFRAME重定向顶级窗口

一方面你可以重定向父iframe,另一方面你不能?当我尝试它时,我重定向父帧没有问题,所以我很好奇为什么每个人都说你不能重定向父帧,除非你在同一个域上。但是我可以重定向,而不需要将帧放在同一个域上。

如前所述,将重定向父iframe。需要记住的一件事是,网站和iframe中包含的网站都需要在同一个域上才能正常工作,否则会出现拒绝访问的异常。

它与浏览器有关吗?

编辑

我有两页,这是有效的,但不应该:

在域1 上

<html>
  <body>
    <iframe src="http://domain2.fr"></iframe>
  </body>
</html>

在域2 上

<html>
  <body>
    <script type="text/javascript">
      window.top.location.href = "http://google.fr";
    </script>
  </body>
</html>

为什么这是可能的答案非常简单。window.locationWeb API的一部分,它与JavaScript核心并不完全相同。它是DOM接口的一部分,因此它由W3C而非ECMA管理。这就是为什么它允许您操作顶部窗口的属性。

严格地说,JS不能做到这一点,因为它缺乏IO功能,这使得语言非常可移植。这就是为什么浏览器实现需要DOM API来查询DOM,并请求重新绘制或与客户端交互。不过,的DOM确实需要IO,因为它从实际的UI进行渲染和读取。ECMAScript委员会中的一些人宁愿看到对window.top的访问受到严格限制,如果不是因为XSS漏洞而全部删除的话。遗憾的是W3C同意不同意,并且无论如何都实现了window.top引用
在这种情况下谁对谁错?我不知道,将客户端重定向到iFrame中的恶意站点很容易,这是不安全的。但是,如果有一个iFrame,然后无法访问顶部窗口,这将意味着无法轻松地与客户端交互,这将是令人沮丧的。但这不是重点。最重要的是,您可以更改一些顶部窗口的属性,会很有用。只要想想mashup。它们在XSS安全方面带来了很多挑战,但为网络地图开辟了许多新的、令人兴奋的可能性。要堵塞一些最危险的XSS漏洞,请查看由Douglas Crockford创建的ADSafe。谷歌也有类似的库,但我忘了它的名字ATM。。。

同源政策在这里也不适用。通过更改浏览器窗口中地址栏中的url,您也在更改window.top.location.href属性。如果那里有相同来源的限制,互联网就会消亡。您没有将请求发送到其他位置,没有从第三方资源获取数据并将其加载到页面中,而是将浏览器重定向到另一个位置,从而关闭并清除DOM。

我的猜测是,这与您可以执行以下操作的原因相同:

<a href="http://google.com" target="_top">Redirect top to Google</a>

我在这里找到了这种行为的规则:http://www.w3.org/TR/html5/browsers.html#valid-浏览上下文名称或关键字

我找不到"为什么",但就我个人而言,我发现在有人点击iframe中的某个内容后重定向家长很有用。在重定向整个页面之前,您可能需要先执行异步操作并验证某些内容。由于使用<a>标记已经可以实现这一点,因此在JS中也发现了这一点。但不确定为什么<a>标签允许该功能。

也就是说,您总是可以通过添加sandbox=""属性来防止这种行为,例如:http://jsfiddle.net/ppkzS/1/

无论何时使用iframesframesobjects,都会设置一个窗口层次结构,这些项目在该层次结构中充当"窗口"。

您可以使用.parent.frameElement等属性遍历此层次结构。属性.top是层次结构中最高点的窗口,通常对应于最外层的帧。

某些操作在层次结构中的窗口之间被禁止,而其他操作则不被禁止。不禁止更改窗口的location

归根结底,那些说你不能这样做的人是不正确的。不能从不同的窗口访问一个窗口的内容,如果它们的域不同。但是,可以修改它们的位置属性。

如果你在同一个域上有两个帧(也有相同的协议和端口),那么一个帧可以将另一个重定向到你想要的任何地方,还可以访问javascript属性,从另一个帧执行函数等。

如果您将一个帧从另一个重定向到另一个域(或协议或端口),那么由于同源策略,您将失去执行我之前所述的所有操作的能力,但重定向本身是允许的,因为在重定向之前,两个帧满足所述策略。

以下是一些有用的信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript

引用自该页面:

如果协议、端口(如果其中一个为指定)和主机对于两个页面是相同的。

显然,framespages是相同的。