用于嵌入 youtube 视频的 CSP

CSP for embedding youtube video

我刚开始在 Chrome 上看到我的嵌入式 YouTube 视频(86.0.4240.193 - 最近更新,这可能就是我看到这个的原因) - 这些只是 'reports' ,所以视频仍然显示,但 100 多个错误不可能是正确的!这就是我所看到的:

[Report Only] Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'strict-dynamic' 'unsafe-inline' https: 'report-sample' 'nonce-t9IE7nI2leo7qKxsm7d80g=='".

这是我的 iFrame --

<iframe id="video-iframe" width="500" height="281" src="https://www.youtube.com/embed/HIDDENVIDEO" frameborder="0" allowfullscreen ></iframe>

我不知道 CSP 应该是什么 -- 这是我发现显然解决了他们问题的一个 --

<iframe id="video-iframe" width="500" height="281" src="https://www.youtube.com/embed/HIDDENVIDEO" frameborder="0" allowfullscreen csp="script-src 'self' https://www.google-analytics.com/ https://www.youtube.com/ https://s.ytimg.com/; object-src 'self'; child-src https://www.youtube.com/* https://s.ytimg.com/"></iframe>

没那么多 -- 我只是看到:拒绝显示....

非常感谢任何帮助。

我刚刚查看了 developers.google.com/youtube/iframe_api_reference#Examples 页面,我也看到了同样的事情——这肯定不应该发生,对吗?

如您所见,触发此错误的不是您的 CPS - 您的 CPS 没有 'nonce-t9IE7nI2leo7qKxsm7d80g=='" 令牌。此错误出现在 Google 的 <iframe> 中,完全是 Google 的内部交易。

事实是 Chrome 的几个早期版本存在错误和 did not block eval 表达式。
在版本 86 Chrome 中,他们修复了这个错误,为了验证这一点,他们设置了 Report-Only header 并假调用 eval 以查看报告。

CSP for Youtube 非常简单,不需要 'unsafe-eval',因为所有工作都在独立的 iframe 中:
frame-src youtube.com www.youtube.com; 足以在 iframe 中允许 Youtube。

顺便说一下,您的 CSP 有一个 error - the * is not allowed in path-part. And be careful with <iframe csp= - 如果服务器不同意您的 CSP,内容将被阻止。
但是这个 <iframe csp= 发挥作用是因为再次出现 Chrome 错误 - 如果 Content-Security-Policy header 存在,它会忽略 Content-Security-Policy-Report-Only。

我能够使用 <head>

中的 meta 标签让我的嵌入式视频正常工作
<meta http-equiv="Content-Security-Policy"
      content="default-src 'self'; img-src https://*; child-src 'none'; frame-src youtube.com https://www.youtube.com;">

https:// 添加到 www.youtube.com