将 nginx $request_id 用于 CSP nonce 值是个好主意吗?

kra*_*miy 8 nginx

要设置严格动态 CSP 源,需要为每个请求维护一个唯一的 nonce 值。根据建议的方式做到这一点这篇文章是:

set_secure_random_alphanum $cspNonce 32;

尽管我使用的是官方 nginx docker 映像,但该映像未安装 nginx_set_misc 模块,并且此行失败并显示错误:

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

我有两个选择:

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

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

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

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

请分享您对此的看法。

小智 10

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

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