在Apache .conf文件中,我有以下代码:
Header set Content-Security-Policy "default-src 'none'; font-src 'self'; img-src 'self'; style-src 'self'"
在HTML / PHP文件中,我有以下代码:
<meta http-equiv="Content-Security-Policy" content="script-src 'nonce-RANDOM' 'strict-dynamic' 'unsafe-inline'">
问题是,当页面加载时,它只假定来自Apache的规则并忽略HTML文件中的规则。
我可以将script-src规则放在Apache .conf文件中,但每次加载页面时都必须生成一个新的nonce标记。所以它必须在HTML文件中。
加载网站时是否可以追加或合并这两条规则?'
编辑1这是浏览器提供的错误:
拒绝加载脚本'...',因为它违反了以下内容 内容安全策略指令:“default-src'none'”。注意 'script-src'没有明确设置,因此'default-src'用作a 回退。
编辑2我尝试了以下方法:
在Apache中:
Header set Content-Security-Policy "default-src 'none'; font-src 'self'; img-src 'self'; style-src 'self'"
在HTML / PHP文件中:
<?php $nonce = RANDOM; header("Content-Security-Policy: script-src 'nonce-$nonce' 'strict-dynamic';"); ?>
现在,当我访问浏览器的开发者页面时,我看到浏览器会重新协调这两个规则,但只应用第一个规则:
Response Headers:
...
Content-Security-Policy: default-src 'none'; font-src 'self'; img-src 'self'; style-src 'self'
Content-Security-Policy: script-src 'nonce-RANDOM' 'strict-dynamic'
...
答案 0 :(得分:0)
由于未得到答复,而我今天正要加固服务器,因此我将让您知道如何使其正常工作。我遇到了同样的问题,因此我查看了模块文档,您需要使用标头合并而不是 set 。我测试了,果然如此。我还更新了标头以支持CSP3。100%通过验证。
Header merge Content-Security-Policy "default-src 'none'; font-src 'self'; img-src 'self'; require-trusted-types-for 'script'; style-src 'self'"
重新启动Apache并进行测试-https://csp-evaluator.withgoogle.com