允许子域之间的跨站点请求,而不更改第二个子域的文件内容

时间:2015-07-20 13:46:26

标签: javascript iis iframe cors xss

我目前正在尝试将Web应用程序(ConnectWise)包装到我公司的中央Intranet站点中。在大多数情况下,这是一个相当简单的过程;创建一个包含iframe的包含页面,将iframe指向ConnectWise网址。这部分几乎适用于所有功能。

问题出现在应用程序的某些选择功能(在这种情况下,创建时间表条目的过程的一部分),这根本无法工作。 Chrome提供以下控制台输出。

Uncaught SecurityError: Failed to read the 'frame' property from 'Window': Blocked a frame with origin "https://app.example.com" from accessing a frame with origin "https://host.example.com". Protocols, domains, and ports must match.

我知道这是由跨站点和同源策略的安全选项引起的。鉴于以下几点,有没有办法克服这个问题?

  • 我对https://host.example.com进行了完全控制
    • 可以更改html,javascript和文件内容
    • 可以更改IIS设置和标题
  • 我对https://app.example.com部分控制
    • 无法更改html,javascript和文件内容
    • 可以更改IIS设置和标题。

我尝试在每台服务器上设置Access-Control-Allow-Origin,到目前为止,这是我遇到的唯一一种无法更改应用服务器文件内容的方法。在给出

的设置(和设置组合)时,这似乎不起作用
    *
  • https://app.example.comhttps://host.example.com*
  • https://host.example.comhttps://app.example.com

修改

this "duplicate" question的解决方案不适用于此处。我有权更改iframed页面(app.example.com)的文件内容(包括javascript)。此外,需要运行权限的脚本是iframe中的页面,而不是托管iframe的页面。

2 个答案:

答案 0 :(得分:1)

不,这是不可能的。

Access-Control-Allow-Origin主要影响从HTTP请求获取原始数据,而非实时DOM。

postMessage可以让不同来源的帧进行通信,但它需要在两个页面上都包含JS。

答案 1 :(得分:1)

Access-Control-Allow-Origin之类的CORS标头只影响AJAX请求,而不影响DOM访问。

但是,如果它们位于同一个域但位于不同的子域中,则可以在每个页面上包含以下内容:

document.domain = 'example.com';

From MDN

  

如果同时设置了一个文档,则允许访问另一个文档   document.domain为相同的值,表示其意图   合作

如果app.example.com有任何script包含在host.example.com,那么您可以将上述代码放在这些脚本中以设置域。

e.g。

<script src="https://host.example.com/setup.js"></script>