【问题标题】:Adding Embedded Youtube video in PHP website gives error in console在 PHP 网站中添加嵌入式 Youtube 视频会导致控制台出错
【发布时间】:2021-02-26 00:08:57
【问题描述】:

请帮忙!

我尝试在我的网站中添加嵌入的 youtube 视频,但由于以下错误而无法加载。如何在不修改默认 CSP 的情况下修改单个文件中的 CSP 标头(覆盖)。我只想修改这个 PHP 文件。

<iframe width="420" height="315"
src="https://www.youtube.com/embed/tgbNymZ7vqY">
</iframe>


Refused to frame 'https://www.youtube.com/' because it violates the following Content Security Policy directive: "default-src 'self'". Note that 'frame-src' was not explicitly set, so 'default-src' is used as a fallback.

【问题讨论】:

    标签: javascript php html embed content-security-policy


    【解决方案1】:

    这取决于您发布 CSP 的方式。

    • 如果您通过header() PHP 函数发布 CSP - 您可以编写一些逻辑来发布哪个标头。

    • 如果您使用某些 CMS 插件 - 您会受到此类插件功能的限制。

    • 如果您是通过.htaccess 文件或网络配置进行的 - 没有简单的方法可以覆盖此类 CSP 标头。它甚至会在不需要的 403/404/502/301/302 页面上发布。
      尽管如此,您可以使用< FilesMatch> 构造(SpecialFileName.php 是从通用 CSP 中排除的文件名):

    &lt;IfModule mod_headers.c&gt;
    &lt;FilesMatch "SpecialFileName\.php$"&gt;
    Header unset Content-Security-Policy # unset 上一个 CSP 标头
    Header set Content-Security-Policy "default-src 'self'; frame-src www.youtube.com;"
    &lt;/FilesMatch&gt;
    &lt;/IfModule&gt;

    或使用< If expression> ... < /If>:

    < IfModule mod_headers.c>
      <If "%{REQUEST_FILENAME} ^.*/SpecialFileName\.php$">
        Header set Content-Security-Policy "default-src 'self'; frame-src www.youtube.com;"
      </If>
      <Else>
        Header set Content-Security-Policy "default-src 'self';"
      </Else>
    < /IfModule>
    

    * 注意:在&lt; IfModule 紧缩中,&lt; 后面不需要空格,这是因为 SO 解析器特性。使用&lt;IfModule

    你可以尝试通过mod_rewrite(重写引擎)来实现,但是这种方式比较复杂,调试和管理都比较困难。

    以上内容适用于 Apache Web 服务器,如果您使用 Nginx - 请参阅它的文档以了解类似的结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-27
      • 2021-03-25
      • 2015-10-19
      • 1970-01-01
      • 2011-12-04
      • 2016-03-20
      • 2015-10-16
      • 1970-01-01
      相关资源
      最近更新 更多