防御缓冲区溢出攻击
Control Buffer Overflow attacks
缓冲区溢出攻击是通过将数据写入缓冲区并超过缓冲区的边界并覆盖进程的内存片段来实现的。
为了防止在nginx
中出现这种情况,我们可以为所有客户端设置缓冲区大小限制。
如果nginx
使用了整个服务器内存,那么大量的POST
请求可以有效地导致DoS
攻击。
允许将大文件上传到服务器可以使攻击者更容易利用系统资源并成功执行拒绝服务。
相应的值取决于服务器内存以及通信量。很久以前我发现了一个有趣的公式:
MAX_MEMORY = client_body_buffer_size x CONCURRENT_TRAFFIC - OS_RAM - FS_CACHE
在我看来,使用较小的client_body_buffer_size
(略大于10k,但不是那么多)肯定更好,
因为更大的缓冲区可以减轻DoS
攻击向量,因为您将为它分配更多的内存。
提示: 如果请求体大于client_body_buffer_size
,它将被写入磁盘,在内存中不可用,因此没有$request_body
。
此外,将client_body_buffer_size
设置过高可能会影响日志文件的大小(如果您记录$request_body
)。
配置样例
nginx configuration
client_body_buffer_size 128k; # default: 8k (32-bit) | 16k (64-bit)
client_header_buffer_size 512k; # default: 1k
client_max_body_size 10m; # default: 1m
large_client_header_buffers 4 512k; # default: 4 8k