处理客户端请求的方法和装置
技术领域
本发明涉及一种处理客户端请求的方法和装置。
背景技术
当今互联网业务中,Web服务占据了相当大的比例,尤其是智能终端设备比如手机等的大面积普及,使得通过Web提供和获取信息的公司和用户呈爆炸性增长,Web服务的安全问题也日益成为人们的一大关注点。超文本传输协议(Hyper Text Transfer Protocol,HTTP)作为Web应用的核心协议,经常被黑客利用来实施分布式拒绝服务攻击(DistributedDenial of Service,DDoS)。在实施DDoS时,黑客发动大量的HTTP请求,使服务器的主要资源在短时间内被用来处理这些HTTP请求从而被几乎耗尽,无法提供其他服务。由于这些HTTP请求非常接近于用户行为,让一般防火墙等防御工具无法区分其为黑客行为还是用户正常访问,所以很难检测和防御。
黑客发动在实施DDoS攻击前,先通过特殊手段按分级治理(黑客主机控制主僵尸,主僵尸控制从僵尸,从僵尸发动攻击)的方式来控制大批散落于互联网各处的可运行程序的计算机或智能设备,这些可运行程序的设备被统称为“肉鸡”,通过操纵数量众多的“肉鸡”,黑客能够在短时间发起大量的HTTP请求,即实施DDoS攻击。
挑战/回复(Challenge/Response)是应对DDoS的一种技术,该种技术一般将真正提供Web服务的服务器隐藏起来,暴露在访问者面前的是守护真正提供Web服务的代理服务器,挑战(Challenge)就发生在访问者与中间的代理服务器之间。
访问者请求首先被代理服务器截住,然后代理服务器利用Cookies技术和HTTP访问跳转技术构造一个响应并返回给访问者,访问者收到这个响应后,通常会先执行一段代码(该步骤可选),然后利用Cookies携带结果并跳转到新的URL上,代理服务器再次截住这个请求,对携带的Cookies值进行校验,如果通过校验,则请求将发送到真正的Web服务器;否则将再次返回之前构造的响应,并记录重试次数,如此循环往复,如超过重试次数,就拒绝访问者。
上述过程中用到的HTTP访问跳转技术一般包括:
1. 302/307等HTTP状态码;
2.HTML语言中关于跳转的META标签;
3.利用JavaScript的Document.location.href语法或基于JavaScript定制的模板。
Challenge/Response的基本过程如下:
步骤1.访问者请求真正提供Web服务的URL;
步骤2.代理服务器截住该请求,然后利用Cookies技术和HTTP访问跳转技术构造响应,并将之返回给访问者;
步骤3.访问者收到该响应后,先执行响应内容中的一段代码,然后利用跳转请求中的Cookies携带计算结果然后发送给代理服务器以进行跳转;
步骤4.代理服务器截住该跳转请求,对其中的Cookies值进行校验,如果校验成功,则将请求直接发送给真正的Web服务器;否则,将之前构造的响应再次返回给访问者,并记录重试次数;
步骤5.循环往复1-4步骤,直到超过重试次数,代理服务器拒绝访问者。
对于现有的挑战/回复技术,黑客能够通过人工或计算机辅助的方式另行分析出步骤2中的响应的源代码得出其中的计算结果,然后将计算结果直接附加在跳转请求中的Cookies内,对于每一台“肉鸡”来说,都通过该方式直接生成跳转请求从而避免由攻击程序进行计算,因此在进行DDoS攻击时仍能够向WEB服务器施加相当大的负荷。
发明内容
有鉴于此,本发明提供一种处理客户端请求的方法和装置,有助于降低WEB服务器受到DDoS攻击时的负荷。
为实现上述目的,根据本发明的一个方面,提供了一种处理客户端请求的方法。
本发明的处理客户端请求的方法包括:WEB服务器的代理服务器截取客户端发送的HTTP访问请求;所述代理服务器根据所述HTTP访问请求确定客户端类型,然后向所述客户端发送响应代码,所述响应代码包含从预设的代码集中选择的对应于该客户端类型的专用挑战代码;所述代理服务器截取所述客户端发送的包含所述客户端执行所述专用挑战代码的结果的跳转请求,然后所述代理服务器判断该结果是否正确,若正确则将该跳转请求发送给所述WEB服务器,否则拒绝所述跳转请求。
可选地,在将所述响应代码发送给所述客户端之前,还包括:所述代理服务器对所述响应代码进行阅读混淆处理。
可选地,在将所述响应代码发送给所述客户端之前,还包括:所述代理服务器对所述响应代码进行加密。
可选地,所述预设的代码集中包括如下的一种或几种代码,其中每种代码包括一组或多组代码:用于计算客户端人机界面几何尺寸的代码;用于获取运行平台特征的代码;用于实现CSS效果的代码。
根据本发明的另一方面,提供了一种处理客户端请求的装置。
本发明的处理客户端请求的装置包括:第一截取模块,用于截取客户端向WEB服务器发送的HTTP访问请求;响应模块,用于根据所述HTTP访问请求确定客户端类型,然后向所述客户端发送响应代码,所述响应代码包含从预设的代码集中选择的对应于该客户端类型的专用挑战代码;第二截取模块,用于截取所述客户端发送的包含所述客户端执行所述专用挑战代码的结果的跳转请求;判断处理模块,用于判断所述结果是否正确,若正确则将该跳转请求发送给所述WEB服务器,否则拒绝所述跳转请求。
可选地,所述响应模块还用于在将所述响应代码发送给所述客户端之前,对所述响应代码进行阅读混淆处理。
可选地,所述响应模块还用于在将所述响应代码发送给所述客户端之前,对所述响应代码进行加密。
可选地,还包括存储模块,用于保存代码集,所述代码集包括如下的一种或几种代码,其中每种代码包括一组或多组代码:用于计算客户端人机界面几何尺寸的代码集、用于获取运行平台特征的代码集、用于实现CSS效果的代码集;所述响应模块还用于从所述代码集中选择代码并添加到所述响应代码中。
根据本发明的技术方案,从预设的代码集中选择挑战代码发送给客户端,该挑战代码是对应于客户端类型的专用挑战代码,这样就起到了对客户端类型的检验作用。而黑客们为了控制尽可能多的“肉鸡”,攻击工具尽可能地简单,往往无法执行专用挑战代码,也就是说经不起对其进行客户端类型检验,从而不能实现对WEB服务器的攻击。在挑战代码从代码集中选择的情况下,要每次通过挑战,黑客的攻击工具需要能够执行代码集中所有挑战代码,这样的攻击工具必然比较复杂,在很多“肉鸡”上难以执行,即其控制的“肉鸡”数量大大降低。在这种情况下黑客再操纵“肉鸡”进行DDoS攻击时,由于“肉鸡”数量大大降低,所以向WEB服务器施加的负荷也随之降低。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的处理客户端请求的方法的主要步骤的示意图;
图2是根据本发明实施例的处理客户端请求的装置的基本结构的示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施例的处理客户端请求的方法的主要步骤的示意图。如图1所示,本发明实施例的处理客户端请求的方法主要包括如下步骤:
步骤S10:WEB服务器的代理服务器截取客户端发送的HTTP访问请求。这里的客户端在一般意义上来说即为通常所说的网页浏览器,也可以认为是其他具有网页浏览器的部分功能的软件,例如黑客采用的攻击工具。
步骤S11:代理服务器根据所述HTTP访问请求确定客户端类型。对于HTTP访问请求来说,其通常包含有关客户端以及用户的一些信息,例如用户名、密码、IP地址、浏览器类型等。因此代理服务器可以通过HTTP访问请求来确定用户使用的是哪种浏览器。
步骤S12:代理服务器按照客户端类型,选择对应于该客户端类型的专用挑战代码。这里的“专用”是指代码只能被指定的客户端执行而不能被其他客户端执行。例如只能被IE浏览器执行,而无法被火狐浏览器执行。这里的挑战代码的具体挑战内容是执行指定客户端特有的指令,例如计算浏览器窗口的尺寸的指令、获取浏览器版本的指令、客户端IP地址的指令、获取客户端操作系统名称和/或版本的指令……等。可以将包含这些指令的代码集预先保存起来供选择。
步骤S13:代理服务器将选择的专用挑战代码添加响应代码中然后发送给客户端。
步骤S14:客户端收到响应代码后,执行其中的挑战代码。
步骤S15:客户端将执行挑战代码的执行结果包含在跳转请求中然后发送给代理服务器。这里的跳转请求是用来访问WEB服务器。
步骤S16:代理服务器截取步骤S15中的跳转请求。
步骤S17:代理服务器判断跳转请求中的上述执行结果是否正确。若正确,进入步骤S18,否则进入步骤S19。
步骤S18:将跳转请求发送给WEB服务器。此后将由WEB服务器与客户端直接交互。
步骤S19:拒绝跳转请求。此时可以向客户端发送一条提示信息。
黑客在进行攻击时,采用的攻击工具一般会伪装成某种类型的浏览器。按照上述流程,黑客的攻击工具将收到挑战代码。因为挑战代码是从代码集中选择的,具有不确定性,因此黑客即使预先准备一个要加入跳转请求的挑战结果,也难以保证刚好是步骤S12中收到的挑战代码对应的挑战结果。为了能够控制尽可能多的“肉鸡”,黑客使用的攻击工具一般都比较简单以便能够被尽可能多的(其中包括配置较低的)计算机执行,因此黑客使用的攻击工具仅仅是伪装成现有的浏览器,一般并不具有该浏览器的全部功能,在这种情况下采用该浏览器的专用指令作为挑战代码,黑客使用的攻击工具往往无法执行,从而“露馅”,被检测出其为伪装浏览器。
如果黑客试图破解代码集中的所有挑战代码,则可以再对上述的步骤S13中的响应代码做进一步处理。因为黑客在破解挑战代码时会人工分析该响应代码,所以对响应代码做进一步处理时主要是对其进行阅读混淆处理。阅读混淆处理是使代码变得不适宜人工阅读的一种处理方式,目前通常的做法是去除网页源代码中的帮助人类阅读的内容,例如注释、有层级的缩进量、空行等,使该源代码难以阅读,也可以在源代码中加入大量空白篇幅以干扰阅读。本实施例中,还可以在源代码中添加无效代码,无效代码是在执行源代码时不被执行的代码,但它们能够占用无效代码的篇幅,为分析者带来阅读和分析的困难。另外还可以对响应代码进行加密,使其难以由人工直接阅读,这里的加密例如自定义变量名,使变量名替换为不常见的形式从而干扰阅读和分析。
图2是根据本发明实施例的处理客户端请求的装置的基本结构的示意图。如图2所示,处理客户端请求的装置20主要包括第一截取模块21、响应模块22、第二截取模块23、以及判断处理模块24。
第一截取模块21用于截取客户端向WEB服务器发送的HTTP访问请求。响应模块22用于根据该HTTP访问请求确定客户端类型,然后向该客户端发送响应代码,这里的响应代码包含从预设的代码集中选择的对应于该客户端类型的专用挑战代码。第二截取模块23用于截取该客户端发送的包含执行上述专用挑战代码的结果的跳转请求,判断处理模块24用于判断该结果是否正确,若正确则将该跳转请求发送给上述WEB服务器,否则拒绝该跳转请求。
响应模块22还可用于在将响应代码发送给客户端之前,对该响应代码进行阅读混淆处理。
响应模块22还可用于在将响应代码发送给客户端之前,对该响应代码进行加密。
处理客户端请求的装置20还可包括存储模块,用于保存代码集,该代码集包括如下的一种或几种代码,其中每种代码包括一组或多组代码:用于计算客户端人机界面几何尺寸的代码集、用于获取运行平台特征的代码集、用于实现CSS效果的代码集;这样,响应模块22还可用于从上述代码集中选择代码并添加到上述响应代码中。
根据本发明实施例的技术方案,从预设的代码集中选择挑战代码发送给客户端,该挑战代码是对应于客户端类型的专用挑战代码,这样就起到了对客户端类型的检验作用。而黑客们为了控制尽可能多的“肉鸡”,攻击工具尽可能地简单,往往无法执行专用挑战代码,也就是说经不起对其进行客户端类型检验,从而不能实现对WEB服务器的攻击。在挑战代码从代码集中选择的情况下,要每次通过挑战,黑客的攻击工具需要能够执行代码集中所有挑战代码,这样的攻击工具必然比较复杂,在很多“肉鸡”上难以执行,即其控制的“肉鸡”数量大大降低。在这种情况下黑客再操纵“肉鸡”进行DDoS攻击时,由于“肉鸡”数量大大降低,所以向WEB服务器施加的负荷也随之降低。
以上结合具体实施例描述了本发明的基本原理,但是,需要指出的是,对本领域的普通技术人员而言,能够理解本发明的方法和设备的全部或者任何步骤或者部件,可以在任何计算装置(包括处理器、存储介质等)或者计算装置的网络中,以硬件、固件、软件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本发明的说明的情况下运用他们的基本编程技能就能实现的。
因此,本发明的目的还可以通过在任何计算装置上运行一个程序或者一组程序来实现。所述计算装置可以是公知的通用装置。因此,本发明的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本发明,并且存储有这样的程序产品的存储介质也构成本发明。显然,所述存储介质可以是任何公知的存储介质或者将来开发出的任何存储介质。
还需要指出的是,在本发明的装置和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本发明的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。