微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用PHP添加Content-Security-Policy,为什么资源加载不出来?

如何解决用PHP添加Content-Security-Policy,为什么资源加载不出来?

我在我的 PHP 文件标题顶部添加了这个:

header("Content-Security-Policy: default-src 'self'  https://apis.google.com  https://www.googletagmanager.com  https://fonts.googleapis.com  https://use.fontawesome.com  https://connect.facebook.net  https://www.facebook.com");

我想允许来自所有这些网站的脚本。我尝试用 * 替换每个 url,比如 https://apis.google.com*.google.com,但结果是一样的。

我也尝试过使用 script-src 而不是 default-src

我认为这是为了允许来自某些网站的所有内容,但未加载该指令中包含的资源。例如,谷歌字体。它们只是无法加载,我看到的是系统字体,而不是 Google 字体。

我做错了什么?

检查控制台我收到此错误

内容安全策略:页面的设置阻止加载 内联资源(“script-src”)。

解决方法

您已允许 'self' 这允许从同一来源的其他 URL 加载脚本。这是最有可能完全安全的来源,因为它不涉及第三方。

'self' 不包括内联脚本(需要 'unsafe-inline''unsafe-hashes' 选项) .

允许内联脚本危险,因为它们是最有可能由 XSS 攻击创建的脚本类型。

进一步阅读:MDN

,

整理好了。以防万一它对某人有帮助:

header("Content-Security-Policy: script-src 'strict-dynamic' 'unsafe-inline' http: https:;
object-src 'none';
base-uri 'none';
require-trusted-types-for 'script';
report-uri https://apis.google.com  https://www.googletagmanager.com  https://fonts.googleapis.com  
https://use.fontawesome.com  
https://connect.facebook.net");
,

整理好了。以防万一它对某人有帮助:

script-src 'strict-dynamic' 'unsafe-inline' http: https:;
object-src 'none';
base-uri 'none';
require-trusted-types-for 'script';
report-uri https://apis.google.com https://www.googletagmanager.com https://fonts.googleapis.com https://use.fontawesome.com https://connect.facebook.net

鉴于 CSP 有 2 fatal errors 并因此阻止任何脚本:

  1. 'strict-dynamic' 取消任何基于主机/基于方案的源和 'unsafe-inline' 令牌(还有 'self')。因此,它必须'nonce-value''hash-value' 配对,以便允许属于这些范围的脚本。
    目前,在兼容 CSP3 的浏览器中,您会阻止所有脚本,因为生成的指令是 script-src 'strict-dynamic' 不允许任何内容。

  2. 对于 require-trusted-types-for 指令,必须使用 Trusted Types API 为某些 XSS 易受攻击的 DOM 接收器赋值。因此该指令 JS constructs 所涵盖,如:element.innerHTML='...'document.write()createElement('script')parseFromString() 等在 Chrome 浏览器中被阻止(其他目前不支持可信类型 API)。

如果您希望使用“strict-dynamic”,请移除 require-trusted-types-for 'script'; 指令并将 'nonce-value''hash-value' 添加到 script-src 中。在这种情况下,只允许具有 nonce="value" 及其子项的脚本。使用 'hash-value' 将允许执行具有此哈希及其子项的脚本(不要忘记外部脚本的完整性 = 属性)。

是的,删除 Quentin 提到的 report-uri 指令。 Google 和 Facebook 尚未准备好提供您的违规报告。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。