要设置严格动态 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 页面的源代码中向用户公开它。
归档时间: |
|
查看次数: |
1727 次 |
最近记录: |