在一个项目中,我们使用 Optimizely Web Experiments 集成进行 A/B 测试。Optimizely Web 带有一个相当不错的 Web 编辑器,它允许您直接在浏览器中修改 A/B 测试的变体。
现在,前段时间,出于安全原因,我们决定引入X-Frame-Options
HTTP 响应标头,以防止我们的应用程序被加载到 iFrame 中。当然,这也会阻止 Optimizely Web Editor 加载我们的页面,因此我们不能再修改变体。
因此,我开始使用Content-Security-Policy
标题并设置这些值:
default-src * 'unsafe-inline' 'unsafe-eval' data:; frame-ancestors 'self' app.optimizely.com www.optimizelyedit.com;
我知道这不是超级安全,但我只想让 Optimizely Web 编辑器加载我的页面。
现在,当我将页面加载到 Web 编辑器中时,我没有收到任何提及违反内容安全策略的警告。而不是这个,我得到一个DOMException
.
webapp 使用 React.js 和 Express。静态资产通过不同的域交付。唯一发生在DOMException
Optimizely Web 编辑器中,似乎app.js
是从第二个域提供的 .
Uncaught DOMException: Blocked a frame with origin "https://www.host-a.de" from accessing a cross-origin frame.
的标头与引用该 JavaScript 文件的初始 HTML 页面的Content-Security-Policy
标头app.js
完全相同。
我真的不明白,为什么我DOMException
只在 Opimizely Web 编辑器中得到这个,而不是当我加载没有它的页面时,我也不知道如何防止它。你有想法吗?