当无法从 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
。如果有人让这个工作,我很乐意听到它。
这感觉像是一个愚蠢的问题,因为它与内容安全策略应该做的一切背道而驰,我知道。
在 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
。如果有人让这个工作,我很乐意听到它。