使用 Apache 2.4 生成随机数(用于内容安全策略标头)

Kay*_*der 8 apache security content-security-policy

我们正在努力创建一个严格的内容安全策略 ( https://csp.withgoogle.com/docs/strict-csp.html ),它要求 Apache 在每次请求资源时创建一个随机数,以便我们可以插入这个随机数进入http标头。

我们如何使用 Apache 2.4 创建随机数?

我读过的所有 CSP 相关文档都说“随机数只是在服务器上生成的一个随机字符串,包含在 CSP 标头中......”但没有找到任何关于如何做的信息这与阿帕奇。我们当然可以用应用程序代码来做到这一点,但通过 Apache 做到这一点似乎是一个更简洁的解决方案/将确保每个页面都获得 CSP 标头。

Wya*_*Day 6

您需要在服务器上生成nonce,然后让 Apache 将其传递nonce到您可以使用它的脚本。

我们为 Apache 创建了一个开源模块来简化此过程:mod_cspnonce

这是服务器端配置的一个简单示例:

LoadModule headers_module modules/mod_headers.so
LoadModule cspnonce_module modules/mod_cspnonce.so

# add the CSP_NONCE to the "default-src"
Header add Content-Security-Policy "default-src 'self' 'nonce-%{CSP_NONCE}e';"
Run Code Online (Sandbox Code Playgroud)

以下是在脚本中使用随机数的简单示例:

<script nonce="<?= $_SERVER['CSP_NONCE'] ?>">
  var inline = 1;
</script>
Run Code Online (Sandbox Code Playgroud)

该示例是 php,但您可以使用任何语言。


小智 0

随机数必须插入到具有内联 CSS 和/或 Javascript 处理程序的任何元素中,因此必须将其插入到应用程序层。

解析输出 HTML 并插入随机数会破坏 CSP 随机数的全部目的——Web 服务器无法知道内联 CSS/JS 是否应该存在,或者它是否是由攻击者插入的。