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 攻击的缓解措施如下:
- 禁用 HTTP 压缩
- 将机密与用户输入分开
- 每个请求随机化机密
- 掩盖机密(通过与每个请求的随机机密进行异或有效随机化)
- 用 CSRF 保护易受攻击的页面
- 长度隐藏(通过向响应中添加随机字节数)
- 限制请求速率
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 仓库中找到此模块的其他配置提示和文档。