繁体   English   中英

为什么iframe可以从其他域更改父窗口的URL?

[英]Why can an iframe change the parent window's URL from a different domain?

我有两个域名:

sub1.domain.org包含一个iframe,其src指向另一个:sub2.domain.org

在sub2:

//triggers a cross-domain security error
alert(window.parent.location.href);

//executes just fine on FF, IE, Chrome, and Safari.
window.parent.location.href = new_url; 

所以看来我可以写入父窗口的URL,但我不允许读它。 这真的是标准吗? 我只需要知道为什么这样做。

我在这里找到了一个答案: 为什么孩子可以重定向父框架?

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

但是这个答案提示了其他后续问题。

当我们更改父级的URL时,我们是否仍然在技术上修改父级的DOM(即使它关闭它),因此违反了同源策略?

如果在这里应用相同的原始政策,互联网究竟会如何死? 当然,我们可以区分手动输入地址栏中的URL,而不是通过不同域上的脚本进行更改。

我知道这个案子并没有违反同源政策,但我仍然在努力弄清楚原因。 任何人都可以进一步了解为什么允许这样做?

iframe更改父窗口的URL不是安全问题。 这只是将一个新页面加载到父窗口中(从而杀死原始父级中包含的iframe)。 那里没有安全问题。

来自不同来源的iframe(正如您所注意到的)不允许访问父级的内容,因为这可能是安全问题。

仅供参考,反之亦然。 父框架可以创建iframe并将其.src设置为它想要的任何内容,包括其他域,但无法访问加载的内容。 这里的核心问题是显示来自其他域的内容不是安全问题,但访问来自不同来源的实际内容可能是一个安全问题。 因此,您通常可以显示您想要的任何内容,而不是访问它。

仅供参考,通过重置父窗口源URL来检测您是否被框架和“破坏”的能力被称为“框架破坏”,并且它被视为内容提供商决定是否可以框架的权利是否或他们可以被诬陷。 现在有更新的控件指定网站是否可以框架,因此在较新的浏览器中不需要框架破坏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM