缓冲区溢出攻击是通过将数据写入缓冲区并超出缓冲区边界和重写内存片段来实现的。

一般防止方法

限制缓冲区大小:

client_body_buffer_size  1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;

client_body_buffer_size
默认8k或16k,表示客户端请求body占用缓冲区大小。
如果连接请求超过缓存区指定的值,那么这些请求实体的整体或部分将尝试写入一个临时文件。

client_header_buffer_size
表示客户端请求头部的缓冲区大小。
绝大多数情况下一个请求头不会大于1k,不过如果有来自于wap客户端的较大的cookie它可能会大于 1k,Nginx将分配给它一个更大的缓冲区,这个值可以在large_client_header_buffers里面设置

client_max_body_size
表示客户端请求的最大可接受body大小,
它出现在请求头部的Content-Length字段,
如果请求大于指定的值,客户端将收到一个”Request Entity Too Large” (413)错误,通常在上传文件到服务器时会受到限制

large_client_header_buffers :
表示一些比较大的请求头使用的缓冲区数量和大小,
默认一个缓冲区大小为操作系统中分页文件大小,通常是4k或8k,请求字段不能大于一个缓冲区大小,
如果客户端发送一个比较大的头,nginx将返回”Request URI too large” (414),请求的头部最长字段不能大于一个缓冲区,否则服务器将返回”Bad request” (400)

同时修改几个超时时间的配置:

client_body_timeout   10;
client_header_timeout 10;
keepalive_timeout     5 5;
send_timeout          10;

client_body_timeout
表示读取请求body的超时时间,
如果连接超过这个时间而客户端没有任何响应,Nginx将返回”Request time out” (408)错误

client_header_timeout
表示读取客户端请求头的超时时间,
如果连接超过这个时间而客户端没有任何响应,Nginx将返回”Request time out” (408)错误

keepalive_timeout
参数的第一个值表示客户端与服务器长连接的超时时间,超过这个时间,服务器将关闭连接,
可选的第二个参数参数表示Response头中Keep-Alive: timeout=time的time值,这个值可以使一些浏览器知道什么时候关闭连接,以便服务器不用重复关闭,如果不指定这个参数,nginx不会在应Response头中发送Keep-Alive信息

send_timeout
表示发送给客户端应答后的超时时间,
Timeout是指没有进入完整established状态,只完成了两次握手,
如果超过这个时间客户端没有任何响应,nginx将关闭连接



Nginx安全配置 缓冲区溢出攻击插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://www.choupangxia.com/2021/07/22/nginx-timeout/