allow-same-origin 不允许我访问***对象的属性

Posted

技术标签:

【中文标题】allow-same-origin 不允许我访问***对象的属性【英文标题】:allow-same-origin doesn't allow me to access properties of top object 【发布时间】:2021-12-09 11:17:11 【问题描述】:

我在页面example1.com中有如下代码:

<iframe src='//example2.com/embed.html' sandbox="allow-same-origin allow-modals allow-scripts allow-top-navigation allow-top-navigation-by-user-activation">

我的embed.html中有以下代码

<script>
    try  
        document.write('top url: ' + top.location.href)
    
catch (e)  
document.write('error' + e);


</script>

我得到错误:

SecurityError: Blocked a frame with origin "https://example2.com" from accessing a cross-origin frame.

我只想获取 top 对象的属性,并且在 iframe 代码中使用标签 allow-same-origin。这个标签不允许我以同源运行 iframe 吗?如果没有,为什么我们有那个标签?

【问题讨论】:

【参考方案1】:

example1.comexample2.com 是不同的域,因此您在 CORS(跨域资源共享)方面存在问题,但与内容安全策略无关。 CORS 仅允许在相同域或域及其子域之间进行直接访问。 您无法在跨源 iframe 中获取 top.location.href 属性,但您可以设置它:top.location.href = 'https://any_domain.com/path.html' 如果 allow-top-navigation 出现在 sandox 属性中或 sandbox 不存在。

sandbox 属性不能帮助绕过 CORS 限制,它只能对 iframe 内部的功能施加额外的限制。

您可以使用window.postMessage() 方法在页面和嵌入其中的 iframe 之间进行跨域通信。

【讨论】:

以上是关于allow-same-origin 不允许我访问***对象的属性的主要内容,如果未能解决你的问题,请参考以下文章

来自第三方主机的 iframe 上的 allow-same-origin 沙箱的安全风险是啥?

沙盒、IFrame 和允许同源

不允许访问控制允许标头

为啥 Mongoose 不允许我访问 JSON 属性?

不允许位置服务时,我可以访问核心位置 api 吗?

请求的注册表访问权限不允许#2