问题描述
在一个项目中,我们使用 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
。
Web 应用程序使用 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.
是从第二个域传送的。
Content-Security-Policy
app.js
的 DOMException
标头与引用该 JavaScript 文件的初始 HTML 页面完全相同。
我真的不明白,为什么我只在 Opimizely Web 编辑器中得到这个 data.frame(
Which = LETTERS[1:11],x = c( c(3,1,4,2,16),NA,rep(NA,2),10)) -> df
df %>% group_by(d = is.na(x)) %>%
arrange(x) %>%
mutate(y = ifelse(!d,rev(x),x)) %>%
ungroup %>% select(-d)
# A tibble: 11 x 3
Which x y
<chr> <dbl> <dbl>
1 B 1 16
2 D 2 10
3 A 3 4
4 C 4 4
5 H 4 3
6 K 10 2
7 E 16 1
8 F NA NA
9 G NA NA
10 I NA NA
11 J NA NA
而不是,当我加载没有它的页面时,我也不知道如何防止它。你有什么想法吗?
解决方法
结果 DOMException
不是由 Content-Security-Policy
标头引起的。即使在关闭安全标头后,我也会收到错误消息。