附加/合并内容安全策略规则

时间:2017-06-19 22:24:52

标签: html apache content-security-policy

在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'
...

1 个答案:

答案 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