iframe存在奇怪的跨域问题

时间:2015-01-29 13:57:04

标签: javascript iframe cross-domain

我在不同的域内使用下面的iframe,但不管怎样,父窗口都会在Chrome和Firefox中重定向。这不应该因跨域策略而被阻止吗?

我可以通过将sandbox=""属性添加到iframe来阻止它,但我仍然很好奇为什么这样做。

<html>
<body>
<iframe src="http://www.samplicio.us/router/default.aspx?SID=0db760c8-4858-4773-9e67-ca7e2cdb3cba&PID=7525e17a-a799-416c-bf84-4ea2e75ac332&AGE=24&GENDER=1&HISPANIC=1&ETHNICITY=1&STANDARD_HHI_US=3" />
</body>
</html>

1 个答案:

答案 0 :(得分:1)

虽然同源策略阻止从跨域框架访问Window属性,但location属性是一个特殊例外。

关于同源政策的MDN文章的Cross-origin script API access部分。

  

iframe.contentWindowwindow.parentwindow.openwindow.opener等JavaScript API允许文档直接相互引用。当两个文档的来源不同时,这些参考文献提供对WindowLocation个对象的非常有限的访问权限,如下两节所述。


跨源窗口:

根据the specification,MDN列出了以下方法和属性,或Window对象是允许跨域的。

方法:

  • window.blur
  • window.close
  • window.focus
  • window.postMessage

属性:

  • window.closed(只读)
  • window.frames(只读)
  • window.length(只读)
  • window.location(读/写)
  • window.opener(只读)
  • window.parent(只读)
  • window.self(只读)
  • window.top(只读)
  • window.window(只读)


跨地点位置:

此外,Location对象的以下属性也可以根据the specification进行。

方法:

  • location.replace

属性:

  • URLUtils.href(只写)


摘要:

如上所示,window.location可跨域读/写访问。在同源策略下,允许帧重新分配另一帧的location属性。在现代浏览器中使用sandbox属性是阻止此类跨域框架访问的正确方法。

您可能还有兴趣阅读OWASP Clickjacking Defense Cheat Sheet页面,其中包含有关防止网站被屏蔽的技术的信息,以及可在旧版浏览器中使用的一些效果较差的对策。