具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。本领域普通技术人员基于本发明中的实施例获得的所有其他实施例,都属于本发明保护的范围。
实施例一、一种防范HTTP POST泛洪攻击的方法,如图1所示,包括:
A1、防火墙接收客户端发送的超文本传输协议HTTP请求。
本发明实施例中,防火墙可以旁路部署或直路部署。在旁路部署方式中,上游网络的HTTP流量被引流到防火墙上,由防火墙按照本发明实施例方法对HTTP攻击进行防范,清洗过滤攻击流量后,将HTTP的正常访问流量回注到下游网络。在直路部署方式中,防火墙直接对来自上游网络的HTTP攻击流量进行防范,过滤掉攻击流量后,令正常的HTTP流量通过防火墙进入下游网络。
防火墙可以持续使用本实施例方法对POST Flood攻击进行防范,优选的,防火墙也可以在检测到发生POST Flood攻击后,才启动本发明实施例的下述防范流程。具体可采用已有的各种检测方式,例如检测服务器收到的HTTP POST请求是否超过预定阀值等。在未发生POST Flood攻击的情况下,防火墙可以不必启动本发明实施例的下述防范流程。
A2、防火墙判断收到的HTTP请求的源地址是否在白名单中,若在白名单中,则执行步骤A3,若不在白名单中,则执行步骤A4。
防火墙可维护一个“源地址监控表”,对应于源地址保存其白名单标记,当然,可以理解的是也可以设置相应的黑名单标记等,本实施例只是针对采用白名单标记的方法进行描述。在启动防范流程的时候,根据源地址监控表对收到的HTTP请求进行分别处理。
A3、防火墙将收到的HTTP请求透过防火墙发送到服务器。
通过后续即将描述的验证过程可知,白名单中记录的源地址为验证通过的源地址,可以认为是真实浏览器用户的网络协议(IP,Internet Protocol)地址,其HTTP请求将直接发送给服务器,进行正常的Web访问。
A4、防火墙代替服务器与客户端建立HTTP连接,接收该客户端发送的HTTP POST请求,继续执行步骤A5。
为保护服务器,防火墙代替服务器与地址不在白名单中的客户端建立HTTP连接。优选的,防火墙可通过与客户端进行三次握手,建立传输控制协议(TCP,Transmission Control Protocol)连接。对于伪造源IP的攻击,如果源IP不能与防火墙建立TCP三次握手,即可将其阻止在三次握手阶段,提高攻击防范的效率。当然,对于僵尸网络发起的攻击,由于攻击源一般都可以与防火墙建立TCP三次握手后再发送POST请求,则需要通过下述进一步的处理来达到防范攻击的目的。
POST是HTTP的标准协议动词,用于编码和传送变量名以及变量值。每个POST请求都由一系列HTTP请求头组成,这些请求头定义了客户端从服务器请求了什么,而响应则是由一系列HTTP应答头和应答数据组成,如果请求成功则返回应答。
A5、防火墙判断接收的POST请求是否携带有验证信息,若未携带验证信息,则执行步骤A6,若携带有验证信息,则执行步骤A7。
客户端发送的POST请求可采用各种方式携带验证信息,例如报文头中的cookie,或报文内容中携带的超文本置标语言(HTML,HyperText MarkupLanguage)页面等,只要能够为防火墙所识别即可。为便于与现有规范兼容,可优选使用符合现有规范要求的携带方式。
A6、防火墙向客户端返回第一响应,该第一响应携带与POST请求的源地址对应的验证信息,用于使客户端重新发起携带该验证信息的POST请求。
防火墙所返回的第一响应同样可采用各种方式,只要能将验证信息带给客户端并使得客户端重新发起携带该验证信息的POST请求即可。为便于与现有规范兼容,可优选使用现有规范已提供的响应方式。
A7、防火墙根据收到的POST请求的源地址验证所携带的验证信息是否符合所述第一响应携带的验证信息,若携带的验证信息正确,则执行步骤A8,若携带的验证信息不正确,则执行步骤A9。
由于正确的验证信息是由防火墙相应于源地址生成并发送给客户端的,因此,防火墙能够根据源地址与验证信息的对应关系确认其是否正确。
A8、防火墙将收到的POST请求的源地址加入白名单,并向客户端返回第二响应,用于使客户端重新发起POST请求。
防火墙所返回的第二响应同样可采用各种方式,只要能使客户端重新发起POST请求即可。为便于与现有规范兼容,可优选使用现有规范已提供的响应方式。
客户端第三次发起POST请求时,源地址已加入到白名单,因此后续的HTTP请求将直接透过防火墙到达服务器,与服务器建立连接并进行正常的Web访问。
A9、防火墙滤除收到的POST请求。
上述防范过程中,通过对客户端的POST请求进行验证来过滤攻击,优选的,还可以进一步记录收到的POST请求的源地址的验证情况,例如,可以扩展“源地址监控表”,除了源地址字段和黑/白名单标记字段外,再增加验证次数以及时间戳字段,对某个源地址进行验证次数(例如,返回第一响应的次数与/或验证信息不正确的次数)以及时间间隔进行记录,若单位时间内,与某个源地址对应的验证次数超过设定阈值(或返回第一响应的次数超过设定的阀值,同时验证信息不正确的次数超过设定的阀值;或者返回第一响应的次数超过设定的阀值),则可认为该源地址为攻击源,切断该源地址的HTTP流量,以提高攻击防范的效率。
本实施例中,对客户端的首次HTTP POST请求响应验证信息,客户端再次请求时携带该验证信息,通过检测验证信息的正确性来防范HTTP POSTFlood攻击,由于僵尸网络等攻击源一般都不能对防火墙响应的报文进行响应,通常无法再次发起携带验证信息的POST请求,即便伪造验证信息直接发起POST请求也无法通过验证,因此防火墙可以有效的切断攻击报文,以保护Web服务器不会受到攻击。
实施例二、本实施例在实施例一的基础上详细描述了采用注入Cookie机制进行防范的具体执行过程,本实施例中,防火墙在检测到发生POST Flood攻击后,启动下述防范流程,其中客户端与防火墙之间的信令流程如图2所示,包括:
B1、防火墙接收客户端发送的HTTP请求,该客户端的源IP不在白名单中,防火墙代替web服务器与客户端进行三次握手,TCP连接成功后写入源IP监控表,记录源IP的验证次数和时间戳。
B2、防火墙接收该客户端发送的HTTP POST请求,该请求携带请求的URL以及数据(data),由于是客户端第一次发送POST请求,还没有携带验证信息。
B3、防火墙向客户端返回“307临时重定向”作为第一响应,并在响应报头中附加上由源IP生成的cookie。一个示例的307响应报文描述如下:
HTTP/1.1307 Temporary Redirect
Connection:Close
Pragma:no-cache
set-cookie:USGSESSID=Cookie值
cache-control:no-cache
Content-Type:text/html;charset=UTF-8;
Content-Length:0;
B4、防火墙与客户端之间关闭连接,第一次交互结束。
B5、如果客户端是真实的浏览器而不是攻击源,在收到“307临时重定向”后,防火墙生成的cookie就会写入到浏览器中,用户可通过对307响应页面的手动确认,再次发送POST请求,由于此时客户端的源IP仍不在白名单中,还是由防火墙代替web服务器与客户端进行三次握手。
B6、防火墙收到带有cookie的POST请求。
B7、防火墙验证Cookie是否正确,如果正确则将源IP加入到白名单里(例如在“源IP监控表”中将该源IP标记为“白”)。
B8、防火墙向客户端返回“408请求超时”响应作为第二响应。一个示例的408响应报文描述如下:
HTTP/1.1408 Timeout
Connection:Close
Pragma:no-cache
cache-control:no-cache
Content-Type:text/html;charset=UTF-8;
Content-Length:0;
当然,防火墙还会在源IP监控表中记录该源IP的cookie验证次数和时间间隔,如果单位时间内的验证次数超过设定阈值,则认为此IP为攻击源,可切断此攻击源的HTTP流量。
B9、防火墙与客户端之间关闭连接,第二次交互结束。
B10、真实的客户端浏览器在收到“408请求超时”后,会自动再次发送POST请求,此时客户端源IP已加入到白名单,该请求以及后续的HTTP请求将直接透过防火墙到达服务器,客户端可以与服务器建立HTTP连接以进行正常的Web访问。
本实施例采用防火墙对客户端的浏览器注入Cookie机制来携带防火墙生成的验证性信息,客户端再次进行POST请求时会在HTTP报头(Header)上附加cookie,防火墙通过检测Cookie的真实性实时进行HTTP POST Flood的攻击防范,有效保护Web服务器的安全。
实施例三、本实施例给出实施例一方法采用HTML页面表单(Form)自动提交技术的一个实例。
本实施例的具体执行过程与实施例二类似,区别之处在于:
防火墙在首次响应客户端发送的HTTP POST请求时,使用“200成功”作为第一响应(对应于步骤B3),通过在200响应的消息部分中的一个简易的表单页面来携带验证信息。
具体的,该表单页面可以包括一个文本框和一个自动提交按钮,该文本框的内容即为用作验证信息的随机验证码,而自动提交按钮则用于使客户端重新发起携带该文本框的POST请求,该自动提交按钮可利用HTML的onload方法与Javascript脚本语言使得客户端浏览器收到此响应后自动进行POST请求。
相应的,客户端在收到这个“200成功”响应后,基于HTML页面表单(Form)自动提交技术,会自动使用原来的URL重新进行POST请求(对应于步骤B6),此时表单中的随机验证码也会被携带发送给防火墙,防火墙即可将其作为验证信息进行验证(对应于步骤B7)。
本实施例采用HTML页面表单自动提交技术来防范HTTP POST Flood攻击,能够在客户端浏览器不支持cookie技术的情况下,既不影响正常客户的Web应用,又有效保护Web服务器的安全。
下面对本发明实施例涉及的装置进行说明。
实施例四、一种防范HTTP POST泛洪攻击的防火墙,可用于执行实施例一中描述的方法,如图3所示,包括:
接收模块101,用于接收客户端发送的超文本传输协议HTTP请求;
第一处理模块102,用于判断接收模块101接收的HTTP请求的源地址是否在白名单中,若在白名单中,则令该HTTP请求透过防火墙到达服务器,若不在白名单中,则代替服务器与客户端建立HTTP连接,触发第二处理模块103的操作;
第二处理模块103,用于判断接收模块101接收的客户端发送的HTTPPOST请求是否携带有验证信息,若未携带验证信息,则向客户端返回第一响应,所称第一响应携带与POST请求的源地址对应的验证信息,用于使客户端重新发起携带该验证信息的POST请求,若携带有验证信息,则触发第三处理模块104的操作;
第三处理模块104,用于根据POST请求的源地址验证所携带的验证信息是否符合所述第一响应携带的验证信息,若携带的验证信息正确,则将该POST请求的源地址加入白名单,并向客户端返回第二响应,用于使客户端重新发起POST请求,若携带的验证信息不正确,则滤除该POST请求。
本发明实施例中,对客户端的首次HTTP POST请求响应验证信息,客户端再次请求时携带该验证信息,通过检测验证信息的正确性即可有效防范HTTP POST Flood攻击,有效保护Web服务器的安全。
优选的,相应于实施例一中的描述,本实施例防火墙可进一步包括:
记录模块105(在图3中以虚线框示出),用于记录POST请求的源地址的验证情况,若单位时间内,与某个源地址对应的返回第一响应的次数与/或验证信息不正确的次数超过设定阈值,则切断该源地址的HTTP流量。
优选的,相应于实施例一中的描述,第一处理模块102代替服务器与客户端建立HTTP连接,是通过与客户端进行三次握手,建立传输控制协议TCP连接。
优选的,相应于实施例一中的描述,本实施例防火墙可进一步包括:控制模块106(在图3中以虚线框示出),用于在检测到发生HTTP POST泛洪攻击后,触发第一处理模块102的判断操作。
与实施例一中的描述相应的,本实施例防火墙可以旁路部署或直路部署。在旁路部署的情况下,当启用防火墙进行HTTP流量过滤时,上游网络的流量被引流到防火墙经过过滤后再回注到下游网络,在未启用防火墙时,则流量不必引流到防火墙,直接从上游网络发送到下游网络。在直路部署情况下,上游网络流量直接经过防火墙到达下游网络,此时防火墙支持路由模式和透明模式,路由模式下,防火墙可以对流经的HTTP流量进行攻击清洗过滤,透明模式下,防火墙令流量直接穿过而不进行处理。本实施例防火墙对客户端的首次HTTP POST请求响应验证信息,客户端再次请求时携带该验证信息,通过检测验证信息的正确性来防范HTTP POST Flood攻击,由于僵尸网络等攻击源一般都不能对防火墙响应的报文进行响应,通常无法再次发起携带验证信息的POST请求,即便伪造验证信息直接发起POST请求也无法通过验证,因此防火墙可以有效的切断攻击报文,以保护Web服务器不会受到攻击。
本领域普通技术人员可以理解,上述实施例中各种方法的全部或部分步骤可以通过程序来指令相关硬件完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器、随机存储器、磁盘或光盘等。
以上对本发明实施例所提供的防范HTTP POST泛洪攻击的方法及防火墙进行了详细介绍,本文中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。