在K8S的ingress-nginx使用 Nginx 配置 Content Security Policy (CSP) 修复网站安全漏洞

Content Security Policy (CSP) 是一项重要的安全措施,可以帮助您的网站免受恶意脚本注入等攻击。在本文中,我将为您介绍如何使用 Nginx 配置 CSP 并保护您的网站。我会详细解释每个步骤,确保您能够顺利实施这项安全措施。

1. 生成唯一的 Nonce 值

在 CSP 中,‘nonce’ 值是一个重要的组成部分,用于标识允许执行的内联脚本。Nginx 提供了内置变量 $request_id,可以用作唯一的 Nonce 值。如果您的 Nginx 版本不支持 $request_id,您还可以使用 Lua 脚本生成一个 UUID。

2. 替换页面中的 Nonce 占位符

在您的页面中,使用 ‘NONCE_TOKEN’ 占位符来表示要替换的 Nonce 值。Nginx 提供了 sub_filter 指令,可以将 ‘NONCE_TOKEN’ 替换为实际的 Nonce 值。您也可以使用 Lua 脚本进行替换,这取决于您的实际情况。

3. 配置 Nginx 添加 CSP 头

使用 add_header 指令在 Nginx 中添加 CSP 头。在 ‘script-src’ 指令中,将 ‘nonce-{id}’ 添加到允许加载的脚本源中。确保将 {id} 替换为您生成的实际 Nonce 值。

以下是一个示例配置,使用 k8s的ingress-nginx 内置变量 $request_id 作为 Nonce 值,在ingress的标签中添加:

nginx.ingress.kubernetes.io/configuration-snippet: >
      set $csp_nonce $request_id; add_header X-Content-Type-Options "nosniff";

      more_clear_headers 'X-Powered-By' 'Server'; add_header X-Frame-Options

      SAMEORIGIN ; add_header Content-Security-Policy "default-src

      'self' 'nonce-$csp_nonce';font-src 'self' data:;object-src
      'nonce-$csp_nonce'; script-src  'unsafe-eval' 'nonce-$csp_nonce'
      'strict-dynamic' ; script-src-elem 'nonce-$csp_nonce' 'unsafe-eval'
      'strict-dynamic' ;

      style-src 'self' 'nonce-$csp_nonce'; img-src 'self' 'nonce-$csp_nonce'

      http://iot-minio-upload.hiacent.info data:;"; sub_filter 'NONCE_TOKEN'

      '$csp_nonce'; sub_filter_once off;

4. 防止攻击者绕过 CSP

为了防止攻击者绕过 CSP,确保您不仅仅在 ‘script’ 标签上使用 Nonce 值,还应在其他相关的地方使用它,比如 ‘script-src-elem’。

总结

通过使用 Nginx 配置 Content Security Policy (CSP),您可以增强您的网站的安全性,防止恶意脚本注入攻击。确保生成唯一的 Nonce 值,替换页面中的占位符,并正确地配置 Nginx 头部,以实现有效的 CSP 防护。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐