【发布时间】:2015-02-15 13:34:44
【问题描述】:
我有两个域:
sub1.domain.org 包含一个 iframe,其 src 指向另一个:sub2.domain.org
在子 2 上:
//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 属性也是如此。如果有同源 那里的限制,互联网将死。你没有发送 请求到另一个位置,您没有从 第三方资源并将其加载到您的页面中,您正在重定向 浏览器移动到另一个位置,这会关闭并清除 DOM。
但这个答案会引发其他后续问题。
当我们更改父级的 URL 时,我们是不是仍然在技术上修改父级的 DOM(即使它关闭它)并因此违反同源策略?
如果在这里应用相同的来源策略,互联网究竟会死多少?当然,我们可以将在地址栏中手动输入 URL 与通过单独域上的脚本更改 URL 区分开来。
我知道这个案例没有违反同源政策,但我仍然在努力理解为什么。任何人都可以进一步了解为什么允许这样做吗?
【问题讨论】:
-
请原谅,我是个白痴,一直在位移太久,但是如果域相同(上面示例中的 domain.org)真的被认为是跨站点脚本吗?我的意思是我意识到子域只是映射到 IP 地址,但所有权不能分割。谁拥有 sub1.domain.org,100% 的时间也拥有 sub2.domain.org 的所有权?我同意您关于无法阅读的报告似乎很愚蠢,在这种情况下,我建议阅读错误是误报,应该更改。也许我对出售子域的合法性不正确。
标签: javascript html dom iframe same-origin-policy