慢速POST攻击通过分块传输编码将请求拆分成极小块并逐个慢速发送,迫使服务器长时间保持连接,从而耗尽并发连接池,是当前最具隐蔽性的应用层DDoS攻击手法之一。
慢速POST攻击原理:分块拖延如何耗尽服务器资源
慢速POST攻击又叫Slow POST攻击,它利用HTTP协议中的分块传输编码(Chunked Transfer Encoding)特性,攻击者发起一个正常的POST请求,但在发送请求体时,将数据拆成多个小分块,每个分块用一个极慢的速度发送,比如每隔几十秒才发一个分块,或者每个分块只有几个字节,服务器在未收到完整的结束标记前,会一直保持连接打开,等待剩余数据,这种状态下,服务器会占用一个连接资源,直到超时或收到完整数据。
分块传输编码的作用
HTTP协议支持分块传输编码,让服务器可以逐步读取请求体,常见于文件上传或流式数据传输,攻击者正是利用这一机制,使服务器认为请求仍在进行中,从而持续占用连接,每个连接都会消耗服务器的内存和线程/进程资源,当大量这样的慢速连接同时存在时,服务器很快达到最大并发连接数,无法接受新用户请求。
攻击者如何控制发送速度
攻击者可以精确控制发送每个分块的间隔时间,例如使用工具如SlowHTTPTest、PySlow或自定义脚本,通过设置一个极低的发送速率(比如每秒1字节),并保持连接处于半开放状态,服务器会耐心等待,常见的攻击配置包括:发送一个很小的POST body,然后暂停几十秒,再发送下一个分块,如此反复,服务器默认的超时时间通常较长(如60秒甚至300秒),这给了攻击者足够的操作空间。
正常请求与慢速POST请求对比
| 对比项 | 正常POST请求 | 慢速POST攻击 |
|---|---|---|
| 请求体发送速度 | 一次性完成或快速发送 | 极慢,分块发送,间隔长 |
| 服务器连接占用时间 | 秒级 | 可达数分钟甚至更长 |
| 对服务器资源的影响 | 短暂占用,快速释放 | 持续占用,累积耗尽连接池 |
| 检测难度 | 正常流量 | 难以与正常低速请求区分 |
慢速POST攻击与慢速读取攻击的区别
慢速攻击家族中除了慢速POST,还有慢速读取(Slow Read)和慢速头部(Slow Headers)攻击,三者都利用服务器等待超时的特性,但手法不同。
攻击方式差异
慢速读取攻击是攻击者发送一个完整的HTTP请求,但以极慢的速度读取服务器响应,使服务器发送缓冲区被填满,连接持续占用,慢速头部攻击则是发送不完整的HTTP请求头,让服务器一直等待头部结束,而慢速POST攻击是在请求体上做文章,通过分块拖延完成时间,行业共识认为,慢速POST攻击在绕过传统DDoS防护时更有效,因为它模拟了正常的POST请求,只是发送速度极慢,很多基于流量阈值的防护系统难以识别。
威胁场景对比
- 慢速POST:适合目标为业务服务器,尤其是需要处理文件上传、表单提交的Web应用。
- 慢速读取:适合攻击带宽充裕但服务器响应慢的场景,比如视频流媒体服务器。
- 慢速头部:适合攻击配置较差的Web服务器,比如Apache默认配置下易受此类攻击。
慢速POST攻击检测工具推荐与使用场景
检测慢速POST攻击需要从连接状态、请求耗时、数据包大小等维度入手,可以通过抓包分析或查看服务器日志发现异常。
检测指标
- 连接持续时间远大于正常请求(比如超过5分钟)
- 请求体大小很小但发送时间极长
- 单个IP的并发连接数异常高
- 服务器日志中出现大量未完成的POST请求
使用Wireshark检测慢速POST攻击
- 捕获服务器网络接口的流量。
- 设置过滤条件:
http.request.method == POST and http.chunked。 - 观察POST请求的数据包时间间隔,如果间隔大于10秒仍持续发送小分块,可能存在攻击。
- 统计每个源IP的POST请求持续时间,超过正常值(如180秒)的列为可疑。
使用开源工具检测
- SlowHTTPTest:既是攻击工具,也可用于自测,通过模拟慢速请求来评估服务器耐受性。
- mod_evasive(Apache):可配置连接频率限制,间接检测异常慢速请求。
- nginx版的limit_req模块:设置请求速率,结合上游服务器超时配置来阻断慢速攻击。

实际检测中,配合日志分析工具(如GoAccess、ELK Stack)可以快速识别异常模式,业内专家指出,多数情况下慢速POST攻击的源IP不会频繁变化,因此基于IP的会话追踪是有效的检测手段。
慢速POST攻击防御方法:从配置到架构
防御慢速POST攻击需要从服务器配置、网络架构、应用层三个层面入手,以下是一些可验证的实操步骤。
调整Web服务器超时参数
Nginx:
- 设置
client_body_timeout为10-30秒,超过此时间未发送完请求体则断开连接。 - 设置
client_header_timeout为10-30秒。 - 设置
proxy_read_timeout和proxy_send_timeout,控制后端请求超时。
Apache:
- 设置
RequestReadTimeout header=20-40,MinRate=500 body=20-40,MinRate=500,限制请求头和请求体的最小速率,低于速率则断开。 - 启用
mod_reqtimeout模块,直接配置超时。
更改超时后务必测试,避免影响正常低速用户(如大文件上传),可以设置一个合理的超时范围,比如上传文件允许更长时间,但普通POST请求限制在20秒内。
使用反向代理和负载均衡
在服务器前端部署反向代理软件(如Nginx、HAProxy)或云负载均衡器,可以提前终止慢速连接,反向代理有更激进的超时设置,同时可以缓存静态请求,减少后端压力,在Nginx反向代理中配置proxy_request_buffering off;,但配合client_body_timeout生效。
部署Web应用防火墙(WAF)
WAF(如ModSecurity、云WAF)可以检测异常请求体发送速率,并自动阻断慢速攻击,配置规则:如果POST请求体发送时间超过设定阈值,且分块大小低于最小值,则判定为攻击,很多云WAF直接提供“慢速攻击防护”开关,一键开启即可。

购买专业DDoS防护服务
对于业务敏感的企业,选择专业防护服务是更稳妥的方案,国内主流云服务商(简米云、酷番云、华为云)都提供DDoS高防IP,其中包含慢速攻击防护能力,价格根据保底带宽和弹性防护而定,起步价从几百元到几千元每月不等,选购时重点关注是否支持“HTTP慢速攻击过滤”和“连接频率限制”。
实操:用Nginx限制请求速率
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=slowpost:10m rate=10r/s;
server {
location / {
limit_conn addr 10;
limit_req zone=slowpost burst=20 nodelay;
proxy_pass http://backend;
}
}
}
这个配置限制了每个IP的并发连接数和请求速率,对慢速攻击者来说,一旦超过速率就会被丢弃,有效防止连接被长时间占用。
慢速POST攻击常见问题解答
慢速POST攻击和普通DDoS攻击有什么区别?
普通DDoS攻击通常通过大量流量或高并发请求直接压垮服务器,带宽或连接数会被瞬间填满,而慢速POST攻击利用极低的发送速率,消耗服务器连接池,流量小但持续时间长,更难被传统流量清洗设备识别,它属于应用层攻击,专门针对Web服务器本身的资源管理缺陷。
慢速POST攻击能彻底防御吗?
通过合理配置服务器超时、部署WAF、使用反向代理,可以极大降低风险,但无法做到100%杜绝,因为攻击者可以模拟正常用户的慢速上传行为,关键在于设置合适的超时阈值和速率限制,让攻击者无法维持连接足够长的时间,多数情况下,这些措施能将攻击影响降到可忽略水平。
小网站如何低成本防护慢速POST攻击?
小网站可以使用开源工具如Nginx并配置client_body_timeout和limit_req,配合云厂商的免费WAF(如简米云免费版)或CDN,这些服务通常自带基础的慢速攻击防护,如果预算有限,优先调整超时参数,并定期检查服务器连接日志,发现异常IP手动封禁,成本几乎为零,但需要技术维护。
