使用 nginx $request_id 作为 CSP nonce 值是个好主意吗?

使用 nginx $request_id 作为 CSP nonce 值是个好主意吗?

建立严格动态 CSP 源需要为每个请求维护一个唯一的 nonce 值。建议按照以下方式执行此操作:本文是:

设置_secure_random_alphanum $cspNonce 32;

虽然我使用的是官方的 nginx docker 镜像,但它没有安装 nginx_set_misc 模块,因此此行失败并出现错误:

nginx:[emerg] /etc/nginx/security-headers-master.conf:54 中未知的指令“set_secure_random_alphanum”

我有两个选择:

– 安装非官方的带 lua 支持的 nginx 镜像,

– 使用可用的 nginx 变量,例如$请求ID,作为 nonce 值。

据我所知,根据 nginx 文档它可以适合:

$request_id – 由 16 个随机字节生成的唯一请求标识符,十六进制(1.11.0)

请分享您的想法。

答案1

如果你使用该NGX_OPENSSL标志编译 nginx,$request_id则值对于 CSP nonce 来说就足够了,因为它是一个 128 位加密强随机数OpenSSL 返回RAND_bytes()。否则,该值将是伪随机的,这意味着推断出服务器 PRNG 状态的攻击者可能能够在其 XSS 负载中伪造正确的 request_id / CSP nonce。实际上,我不会太担心这一点,因为攻击并不简单,需要向服务器发送大量流量,但值得记住这一点。

需要注意的一件事是确保 request_id 值不会用于应用程序中可能敏感的任何其他内容,因为您将在 HTML 页面的源代码中将其公开给用户。

相关内容