zoukankan      html  css  js  c++  java
  • Http 慢速攻击问题修复记录

    Http 慢速攻击定义

    HTTP 慢速攻击也叫 slow http attack,是一种 DoS 攻击的方式。由于 HTTP 请求底层使用 TCP 网络连接进行会话,因此如果中间件对会话超时时间设置不合理,并且HTTP在发送请求的时候采用慢速发 HTTP 请求,就会导致占用一个 HTTP 连接会话。如果发送大量慢速的 HTTP 包就会导致拒绝服务攻击DoS。

    三种攻击方式

    1. Slow headers (也称 slowloris):Web 应用在处理 HTTP 请求之前都要先接收完所有的 HTTP 头部,Web 服务器再没接收到 2 个连续的 时,会认为客户端没有发送完头部,而持续的等等客户端发送数据,消耗服务器的连接和内存资源。

    2. Slow body (也称 Slow HTTP POST):攻击者发送一个 HTTP POST 请求,该请求的 Content-Length 头部值很大,使得 Web 服务器或代理认为客户端要发送很大的数据。服务器会保持连接准备接收数据,但攻击客户端每次只发送很少量的数据,使该连接一直保持存活,消耗服务器的连接和内存资源。

    3. Slow read (也称 Slow Read attack):客户端与服务器建立连接并发送了一个 HTTP 请求,客户端发送完整的请求给服务器端,然后一直保持这个连接,以很低的速度读取 Response,比如很长一段时间客户端不读取任何数据,通过发送 Zero Window 到服务器,让服务器误以为客户端很忙,直到连接快超时前才读取一个字节,以消耗服务器的连接和内存资源。

    解决方案

    1. SpringBoot

    springboot 配置文件中添加如下配置:

    server.connection-timeout=20000
    

    2. Tomcat

    tomcat 配置文件 server.xml 中修改 Connector 中的 connectiontimeout 的值:

    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    

    3. Nginx

    nginx 上可以增加如下配置来解决此问题:

    # 指定客户端与服务端建立连接后发送 request body 的超时时间,配置段:http,server,location
    client_body_timeout 20s;
    
    # 指定客户端向服务端发送一个完整的 request header 的超时时间,配置段:http,server,location
    client_header_timeout 10s;
    
    # 服务端向客户端传输数据的超时时间,配置段:http,server,location
    send_timeout 30s;
    

    测试

    使用 slowhttptest 测试,具体测试方式可以参照下面的参考链接。

    这里主要说一下测试结果的验证,slowhttptest 测试过程中会显示如下图的执行结果:

    这里主要看两行:

    1. 最后一行的 service available 是否始终处于 Yes 状态,也就是服务正常访问状态
    2. 观察第一行中的数值(即测试时间),测试连接是否在超过之前配置的超时时间之后结束。

    如果 slowhttptest 执行期间,服务始终正常访问,访问超时之后就结束,则证明配置生效。

    参考来源

    https://blog.csdn.net/weixin_39934520/article/details/107707268
    https://www.cnblogs.com/endust/p/11960901.html
    https://www.cnblogs.com/52py/p/10931089.html

  • 相关阅读:
    php常见细节错误
    php+jquery注册实例
    yii2添加自定义字段
    yii2开启session
    yii2中textarea中的默认值设置
    yii2.0分页
    yii2多语言
    mysql中查询值为NULL的记录
    yii Html中的a标签使用
    yii2顶部导航使用
  • 原文地址:https://www.cnblogs.com/java-linux/p/13452625.html
Copyright © 2011-2022 走看看