当无法从 default-src: 'none' 更改 CSP 时,是否可以进行 REST 调用?

Is it possible to make REST calls when the CSP cannot be changed from default-src: 'none'?

这感觉像是一个愚蠢的问题,因为它与内容安全策略应该做的一切背道而驰,我知道。

foo.baz.com 有一个网页需要本地从 bar.baz.com 到 运行 的数据。这是获取该数据并将其放入 cookie 中的函数:

function() {
    let request = new XMLHttpRequest();

    request.open("GET", "https://bar.baz.com/endpoint");

    request.onload = () => {...put the results in a cookie...};

    request.send();
}

不幸的是,foo.baz.com 上的页面有一个 default-src: 'none' 的 CSP 指令并且归另一个团队所有,所以我无法更改它。 (此功能正在浏览器控制台中 运行。)

XMLHttpRequest、jQuery 和获取都产生此 CSP 错误:

Refused to connect to 'https://bar.baz.com/endpoint' because it violates the following Content Security Policy directive: "default-src 'none'". Note that 'connect-src' was not explicit set, so 'default-src' is used as a fallback.

当 CSP 指令 不能 时,是否有可能从 baz.com 的一个子域向另一个子域进行 API 调用从 default-src: 'none'?

更改

(可能通过动态设置 connect-src 指令、添加访问控制 header 或使用可以在 CSP 之外发出请求的库?)

如评论中所述,这是不可能的,必须重新设计一些内容。

我们所做的是删除对 bar.baz.com 的调用,而是定义一个满足 foo.baz.com 加载条件的占位符 cookie。然后,我们将离开 foo.baz.com 的所有 REST 调用重定向到本地代理 运行。代理将在启动时调用 bar.baz.com,并将出站 REST 调用中的占位符 cookie 替换为来自 baz.bar.com 的值。然后它将这些请求转发给适当的主机。我们使用的代理是express-http-proxy,但有很多类似的。

我们几乎开始工作的另一个选择是编写一个脚本,该脚本将在 bar.baz.com 开始并进行调用。然后它将结果存储为 cookie 或局部变量,并使用 window.assign 导航到 foo.baz.com。如果有人让这个工作,我很乐意听到它。