Security 如何允许具有内容安全策略(CSP)的iframe

Security 如何允许具有内容安全策略(CSP)的iframe,security,iframe,content-security-policy,Security,Iframe,Content Security Policy,我正在为我的网站设置内容安全策略(CSP)。在过去的几周里,我一直在使用它,没有任何问题。我已经成功集成了外部脚本和其他各种东西 今天我想集成一个第三部分日历预订系统(Calendly)。他们使用一个iframe作为弹出窗口,在我的一生中,我无法在安全策略上接受它 我一直在犯这个错误 “拒绝框接'url to calendly',因为它违反了以下内容安全策略指令:“frame src” 我已经厌倦了将其添加到框架src组件中 frame srchttps://assets.calendly.co

我正在为我的网站设置内容安全策略(CSP)。在过去的几周里,我一直在使用它,没有任何问题。我已经成功集成了外部脚本和其他各种东西

今天我想集成一个第三部分日历预订系统(Calendly)。他们使用一个iframe作为弹出窗口,在我的一生中,我无法在安全策略上接受它

我一直在犯这个错误 “拒绝框接'url to calendly',因为它违反了以下内容安全策略指令:“frame src”

我已经厌倦了将其添加到框架src组件中
frame srchttps://assets.calendly.com;
框架src“self”https://assets.calendly.com;
框架src“self”https://assets.calendly.com “不安全内联”;
frame srchttps://assets.calendly.com “临时大量数字”;
框架src“self”https://assets.calendly.com “临时大量数字”;

我在
child src
指令下也做了同样的操作。因为框架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;

要使Calendly在您的网站上工作,您需要添加以下CSP规则:

frame-src https://calendly.com;
script-src https://assets.calendly.com;
style-src 'unsafe-inline';

所以事实证明答案很简单。我直接联系了calendly,简单的解决办法是更改我添加的url。
https://calendly.com
足以完成这一任务


所以你给@andrii的url是正确的-谢谢。但是使用“不安全内联”是不可取的。在任何来源上使用它都会使你的CSP几乎毫无意义。原因不在你的CSP策略中,所以你不能在CSP策略中修复它。原因是
https://assets.calendly.com
正在为站点本身提供服务一个标题,告诉浏览器不允许其他站点对其进行框显。因此,您的浏览器尊重该标题,不允许您的站点对其进行框显。您无法覆盖该标题。您的站点无法框显该标题。@sideshowbarker非常感谢您回复我。您是如何发现这是由Calndly造成的我很担心这个问题?我很担心这不是CSP的问题。因为我看不出我做错了什么,所以我失去了理智。除了直接联系calendly(我已经这么做了)之外,你知道解决这个问题的其他方法吗?谢谢你的帮助,我很感激。@sideshowbarker你怎么知道是它导致了问题,而不是davidlower8实现了他的iframe/CSP?谢谢你。@mike_butak如果你使用浏览器开发工具中的“网络”窗格,或curl或Postman或其他什么,并检查来自的响应的响应标题,则表明响应e包括
x-frame-options:deny
,这意味着
https://assets.calendly.com
的意思是“不允许其他网站将我置于框架中”。因此,浏览器遵守这一规定,拒绝允许问题中的站点显示在框架中。@sideshowbarker谢谢!您的回答真的很有帮助。我在“网络”选项卡中看到209个请求,其中没有一个包含iframe中请求的资源(在我的情况下,iframe不是calendly,而是我在公司开发的内部站点)。值得注意的是,我的代码在旧版本的客户端中工作,我的iframe应用程序加载正常。客户端的更新版本是我遇到问题的地方。除了通过javascript注入此iframe的表单设计器之外,我无法控制客户端代码。我必须在何处添加这些代码?