【发布时间】:2019-08-10 13:59:54
【问题描述】:
我正在为我的网站设置内容安全策略 (CSP)。过去几周我一直在几个网站上使用它,没有任何问题。我已经成功集成了外部脚本和其他各种东西。
今天虽然我想集成第三方日历预订系统(Calendly)。他们使用 iframe 来弹出窗口,而在我的一生中,我无法在安全策略中接受它。
我不断收到此错误 “拒绝构建‘url-to-calendly’,因为它违反了以下内容安全策略指令:“frame-src”...
我已经厌倦了将它添加到 frame-src 组件中
frame-src https://assets.calendly.com;
frame-src 'self' https://assets.calendly.com;
frame-src 'self' https://assets.calendly.com 'unsafe-inline';
frame-src https://assets.calendly.com 'nonce-lots-of-digits';
frame-src 'self' https://assets.calendly.com 'nonce-lots-of-digits';
我也在child-src 指令下做了同样的事情。由于 frame-src 在版本二中不再使用。同样,这也不起作用。这是我的完整 CSP。在这里的任何帮助将不胜感激 - 谢谢。附言。我正在使用 chrome 开发工具。它似乎在 Safari 中也不起作用。
Content-Security-Policy:
script-src 'nonce-4dfb7738f82d40efc1b73a80491d6dd0bb839173' 'unsafe-inline'; object-src 'none';
default-src 'nonce-77184b203c574dfd8ecc7fac417bf078242d4657';
img-src 'self' https://www.google-analytics.com www.google-analytics.com https://stats.g.doubleclick.net;
style-src 'self' https://assets.calendly.com;
font-src 'self';
connect-src 'self' https://www.google-analytics.com www.google-analytics.com https://stats.g.doubleclick.net;
base-uri 'none';
child-src https://assets.calendly.com;
frame-src https://assets.calendly.com;
【问题讨论】:
-
原因不在您的 CSP 策略中,因此您无法在 CSP 策略中修复它。原因是
https://assets.calendly.com站点本身提供了一个标头,该标头告诉浏览器不允许其他站点对其进行构图。因此,您的浏览器尊重该标题,并且不允许您的网站构建该标题。而且您无法覆盖它。您的网站无法构建这样的框架。 -
@sideshowbarker 非常感谢您回复我。你是如何发现它是导致问题的原因?我松了一口气,这不是 CSP。我正在失去理智,因为我看不出我做错了什么。您是否知道解决此问题的任何步骤-除了直接联系calendly(我已经这样做了)?感谢您的帮助,我很感激。
-
@sideshowbarker 你怎么知道是导致问题的原因,而不是 davidlower8 的 iframe / CSP 实现?谢谢。
-
@mike_butak 如果您在浏览器 devtools、curl 或 Postman 或其他任何工具中使用“网络”窗格,并检查来自 assets.calendly.com 的响应的响应标头,则表明响应包括
x-frame-options: deny,这意味着https://assets.calendly.com正在说“不允许其他网站将我放入框架中”。所以浏览器会遵守这一点,并拒绝让问题中的网站在框架中显示assets.calendly.com。 -
@sideshowbarker 谢谢!你的回答真的很有帮助。我在网络选项卡中看到 209 个请求,其中没有一个包含 iframe 中请求的资源(在我的情况下,这不是 calendly,而是我在我们公司开发的内部站点)。有趣的是,我的代码在旧版本的客户端中工作,并且我的 iframed 应用程序加载得很好。客户端的更新版本是我遇到问题的地方。除了通过 javascript 在其中注入此 iframe 的表单设计器之外,我不控制客户端代码。
标签: security iframe content-security-policy