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

Allowing cross-site requests between subdomains without changing file contents of second sub domain

本文关键字:改变 第二个 文件 请求 之间 站点      更新时间:2023-09-26

我目前正在尝试包装一个web应用程序(ConnectWise),以便包含在我公司的中央内部网站点中。这在很大程度上是一个相当简单的过程;创建一个包含页面,使用iframe,将iframe指向ConnectWise url。这部分几乎适用于所有功能。

问题出现在应用程序的某些选择功能中(在本例中,是创建时间表条目的过程的一部分),这些功能根本无法工作。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.com,而https://app.example.com
编辑:

这个"重复"问题的答案在这里不适用。我有权更改iframed页面(app.example.com)的文件内容(包括javascript)。此外,需要运行权限的脚本是iframe内的页面,而不是承载iframe的页面。

CORS头如Access-Control-Allow-Origin只影响AJAX请求,不影响DOM访问。

然而,如果它们都在同一域但不同的子域,那么你可以在每个页面上包括以下内容:

document.domain = 'example.com';
从MDN:

允许一个文档访问另一个文档,如果它们都设置了文档。域设置为相同的值,表明其意图合作

如果app.example.com有任何script包含到host.example.com,那么你可以把上面的代码放在这些脚本中来设置域。

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

不可能。

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

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