我正在仅报告模式下设置内容安全策略。 当我测试它时,谷歌浏览器给出了这个错误:
内容安全策略'default-src'self'; script-src 'self' 'unsafe-inline' https://use.typekit.com https://js.hs-analytics.net https://google-analytics.com https://ajax .googleapis.com;字体-src https://use.typekit.com; style-src 'self' 'unsafe-inline' https://use.typekit.com;框架-src https://www.youtube.com;' 以仅报告模式交付,但未指定“report-uri”;该策略将无效。 请添加“report-uri”指令,或通过“Content-Security-Policy”标头传递策略。
这是我的完整内容安全策略,我在网站的标头 PHP 文件中定义了 HTTP 标头:
header("Content-Security-Policy-Report-Only: default-src 'self';
script-src 'self' 'unsafe-inline' https://use.typekit.com https://js.hs-analytics.net https://google-analytics.com https://ajax.googleapis.com;
font-src https://use.typekit.com;
style-src 'self' 'unsafe-inline' https://use.typekit.com;
frame-src https://www.youtube.com;
report-uri /csp-violations-report-endpoint;
");
我在 Web 根目录中有一个文件夹:csp-violations-report-endpoint,其中有一个 index.php 文件来处理违规行为。
我不确定我做错了什么。 我已阅读 MDN 对 report-uri 的建议 并使用 Google 的示例 来编写我的 report-uri 指令。
我应该尝试将
report-uri
指向根目录中的脚本吗?我应该尝试让它自己登录,还是需要一个解析器来处理它?我的脚本可能有问题吗? (如果有帮助的话我可以包括在内)
编辑:我的网络浏览器可能会忽略
report-uri
指令(因为它已被弃用)并期待 report-to
指令,这就是它不起作用的原因,但错误消息让我相信这不是'是这样的。
我可能完全没有根据,但是,如果您使用的代码与上图完全相同,那么您可能会发送一堆无效标头。 HTTP 标头必须存在于一行中,而您的则不然。 试试这个:
header(
"Content-Security-Policy-Report-Only: default-src 'self'; " .
"script-src 'self' 'unsafe-inline' https://use.typekit.com https://js.hs-analytics.net https://google-analytics.com https://ajax.googleapis.com; " .
"font-src https://use.typekit.com; " .
"style-src 'self' 'unsafe-inline' https://use.typekit.com; " .
"frame-src https://www.youtube.com; " .
"report-uri /csp-violations-report-endpoint; "
);