我有两个域名:
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,而不是通过不同域上的脚本进行更改。
我知道这个案子并没有违反同源政策,但我仍然在努力弄清楚原因。任何人都可以进一步了解为什么允许这样做吗?
答案 0 :(得分:0)
iframe更改父窗口的URL不是安全问题。这只是将一个新页面加载到父窗口中(从而杀死原始父级中包含的iframe)。那里没有安全问题。
来自不同来源的iframe(正如您所注意到的)不允许访问父级的内容,因为这可能是一个安全问题。
仅供参考,反过来也是如此。父框架可以创建iframe并将其.src
设置为它想要的任何内容,包括其他域,但无法访问加载的内容。这里的核心问题是显示来自其他域的内容不是安全问题,但访问来自不同来源的实际内容可能是一个安全问题。所以,你通常被允许显示你想要的任何内容,而不是访问它。
仅供参考,通过重置父窗口源URL来检测您是否被框架和“破坏”的能力被称为“框架破坏”,并且它被视为内容提供商决定他们是否有权可以是框架还是不框架,或者他们可以被框架。现在有更新的控件可以指定网站是否可以框架,因此在较新的浏览器中不需要框架破坏。