SpringBoot解决Slow HTTP慢速攻击漏洞

项目场景:

扫描到的漏洞截图:


攻击原理:

       Web应用在处理HTTP请求之前都要先接收完所有的HTTP头部,因为HTTP头部中包含了一些Web应用可能用到的重要的信息。攻击者利用这点,发起一个HTTP请求,一直不停的发送HTTP头部,消耗服务器的连接和内存资源。抓包数据可见,攻击客户端与服务器建立TCP连接后,每10秒才向服务器发送一个HTTP头部,而Web服务器在没接收到2个连续的\r\n时,会认为客户端没有发送完头部,而持续的等等客户端发送数据。如果恶意攻击者客户端持续建立这样的连接,那么服务器上可用的连接将一点一点被占满,从而导致拒绝服务。这种攻击类型称为慢速HTTP拒绝服务攻击。


解决方案:

使用connection-timeout控制超时时间,不同的Spring Boot版本配置有些不同。

Spring Boot2.1.9.RELEASE之前(包含),2.1.9.RELEASE官方文档

 在application.properties添加配置:

# Time that connectors wait for another HTTP request before closing the connection. When not set, the connector's container-specific default is used. Use a value of -1 to indicate no (that is, an infinite) timeout.
# 连接器在关闭连接之前等待另一个HTTP请求的时间。如果未设置,则使用连接器容器特定的默认值。使用值-1表示没有(即无限)超时。
server.connection-timeout = 10000

  Spring Boot2.2.0.RELEASE之后(包含),2.2.0.RELEASE官方文档

在application.properties添加配置:

# Amount of time the connector will wait, after accepting a connection, for the request URI line to be presented.
# 连接器在接受连接后等待呈现请求URI行的时间量。
server.tomcat.connection-timeout = 10000

 总结:

        这里的connection-timeout是建立TCP连接并读取HTTP报文的超时时间,并不是整个HTTP请求的超时时间,接口响应超时跟这个没关系,所以它对业务逻辑的执行没有影响。


 附加: 

还可以优化下tomcat的线程数与连接数,这里Spring Boot高版本低版本配置相同。

# 最大连接数,默认10000
server.tomcat.max-connections=2000
# 最大线程数,默认200
server.tomcat.max-threads=2000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涛哥是个大帅比

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值