我在不同的域内使用下面的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ÐNICITY=1&STANDARD_HHI_US=3" />
</body>
</html>
答案 0 :(得分:1)
虽然同源策略阻止从跨域框架访问Window
属性,但location
属性是一个特殊例外。
关于同源政策的MDN文章的Cross-origin script API access部分。
iframe.contentWindow
,window.parent
,window.open
和window.opener
等JavaScript API允许文档直接相互引用。当两个文档的来源不同时,这些参考文献提供对Window
和Location
个对象的非常有限的访问权限,如下两节所述。
根据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页面,其中包含有关防止网站被屏蔽的技术的信息,以及可在旧版浏览器中使用的一些效果较差的对策。