跳转至

length-hiding: NGINX 长度隐藏过滤模块

安装

您可以在任何基于 RHEL 的发行版中安装此模块,包括但不限于:

  • RedHat Enterprise Linux 7、8、9 和 10
  • CentOS 7、8、9
  • AlmaLinux 8、9
  • Rocky Linux 8、9
  • Amazon Linux 2 和 Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-length-hiding
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-length-hiding

通过在 /etc/nginx/nginx.conf 顶部添加以下内容来启用该模块:

load_module modules/ngx_http_length_hiding_filter_module.so;

本文档描述了 nginx-module-length-hiding v1.1.1,发布于 2017 年 7 月 19 日。


Nginx 长度隐藏过滤模块

介绍

BREACH 网站 中,针对 BREACH 攻击的缓解措施如下:

  1. 禁用 HTTP 压缩
  2. 将机密与用户输入分开
  3. 每个请求随机化机密
  4. 掩盖机密(通过与每个请求的随机机密进行异或有效随机化)
  5. 用 CSRF 保护易受攻击的页面
  6. 长度隐藏(通过向响应中添加随机字节数)
  7. 限制请求速率

BREACH 依赖于 HTTP 压缩,因此禁用它是保护您网站的合理措施。然而,如果没有压缩,一些网站可能会遇到严重的性能下降,或者如果您根据流量收费(如 AWS),成本可能会增加。在这种情况下,可能很难关闭来自您网站的整个响应的 HTML 压缩,需要采用其他合适的方法。

上述第 2 到第 5 点列出的其他缓解措施基本上适用于您的应用程序,但第 6 点长度隐藏可以在 nginx 上完成。此过滤模块提供了将随机生成的 HTML 注释附加到响应主体末尾的功能,以隐藏正确的响应长度,并使攻击者难以猜测安全令牌。

随机附加的 HTML 注释示例如下:

<!-- random-length HTML comment: JnSLGWeWYWsoJ4dXS3ubLw3YOu3zfGTotlzx7UJUo26xuXICQ2cbpVy1Dprgv8Icj6QfOZx2Ptp9HxCVoevTxhKzMzV6xeYXao0oCngRWJRb4Tvive1iBAXLzrHlLg6jKwNKXrct0tJuA2TvWIRVIng6UoffIbCQLPbi63PwmWemOxVi6m3CPa6hCbAK2CaBR1jLux7UJa4WNN4H0yIDMElMglWWouY5m5FUqAn0afMmtErj0zkA2LMWxisZRES38XLoYycySmaBrIih5IixUsJFR0ei4uZ0IifgV5SnitoNzMusSQem9npObHuU2HKApneAjwnFdPSQZA9sRdSOE8agDI05P832mV1JIcOjsg0FgzxvSG7UEX0HdqBqp2jPOYYW0k5gGtmkiXWydRJfn9lGomxReUeqq2Aec69gplEM6a8aqH5TFgXrGK8jcaPISQlsKkMxJQ7Fp6fVDbmI59xCIvlk -->
对于每个响应,随机字符串的长度将在给定范围内变化。

这个想法最初来自 breach-mitigation-rails。感谢团队!

警告

正如在 breach-migration-rails 中所说,BREACH 是一种复杂且广泛的攻击,此模块仅提供部分保护。要全面保护您的网站或服务,您需要审查 BREACH 论文,并根据您自己的网站或服务找到合适的方法。

配置指令

length_hiding

  • 语法:length_hiding on | off
  • 默认值:off
  • 上下文:http、server、location、if in location

启用或禁用添加随机生成的 HTML 注释。

length_hiding_max

  • 语法:length_hiding_max size
  • 默认值:2048
  • 上下文:http、server、location

设置用于 HTML 注释的随机生成字符串的最大长度。大小应在 256 到 2048 之间。

示例配置

为特定位置('/hiding')启用此模块。在此示例中,随机字符串的长度将小于 1024。

server {
    listen       443 default_server deferred ssl spdy;
    server_name  example.com;
    length_hiding_max 1024;

    location /hiding {
        length_hiding on;
    }
}

如果此模块作为动态模块构建,请不要忘记在 nginx 配置中包含 load_module 行。

load_module modules/ngx_http_length_hiding_filter_module.so;

使用此模块的服务

GitHub

您可以在 nginx-module-length-hiding 的 GitHub 仓库中找到此模块的其他配置提示和文档。