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

时间:2014-12-17 04:12:54

标签: javascript html dom iframe same-origin-policy

我有两个域名:

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,但我不允许阅读它。这真的是标准吗?我只需要知道为什么这样做。

我在这里找到了一个答案:Why can a child redirect a parent frame?

  

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

但是这个答案提示了其他跟进问题。

当我们更改父母的网址时,我们是否还在技术上修改了父级的DOM(即使它关闭了它),因此违反了同源政策?

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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