本发明涉及Web攻击识别技术领域,具体涉及一种基于HTTP响应头变化的准确攻击识别方法。
背景技术:
目前Web攻击识别技术几乎都是根据HTTP请求进行检测的。检测方法是,客户端请求到达服务器前对客户端请求数据进行攻击特征匹配。例如客户端请求为http://www.example.com/?id=1and 1=1,如果and 1=1匹配了攻击特征,就识别为攻击,如果没有匹配攻击特征就识别为非攻击。此检测方法有几项缺点:首先,攻击识别是在客户端请求到达服务器前,导致攻击是否生效不能判别;其次,不同服务器对请求数据的处理方式不同产生很高的误报率;最后,识别方法是依据攻击特征的,当有新的攻击手法时,需要及时的进行特征分析和补充。
相关术语解释
HTTP:超文本传输协议(Hyper Text Transfer Protocol),是互联网上应用最为广泛的一种网络协议。
HTTP响应头:HTTP服务器向客户机的响应消息,状态行后的一个或多个,由HTTP头域名,冒号(:)和域值(域值前边要至少有一个空格)组成的内容。
Content-Length:HTTP消息实体的传输长度(在HTTP响应头中该字段标识服务器响应内容实体传输长度)。
技术实现要素:
本发明所要解决的技术问题是提供一种基于HTTP响应头变化的准确攻击识别方法,解决现有Web攻击识别技术中不能判定攻击是否生效、高误报率、新的攻击方法出现后要进行攻击特征分析和补充等问题。
为解决上述技术问题,本发明采用的技术方案是:
一种基于HTTP响应头变化的准确攻击识别方法,包括以下步骤:
步骤1:接收客户端HTTP请求并进行预判,判断HTTP请求是否为疑似攻击,若预判结果为疑似攻击,则将该请求拦截,将客户端请求数据替换为普通内容后发送给服务器;
步骤2:记录服务器发送的HTTP响应头,将客户端原始请求数据发送给服务器;
步骤3:再次记录服务器发送的HTTP响应头;
步骤4:对比两次HTTP响应头是否发生变化;若发生变化,判断本次客户端请求为攻击,若对比结果未发生变化,判断本次客户端请求为非攻击。
根据上述方案,若步骤1的预判结果为非攻击,则断定本次客户端请求为非攻击。
与现有技术相比,本发明的有益效果是:对疑似攻击行为准确识别,识别出其为攻击还是非攻击;准确判定攻击是否生效,误报率低;此外,在新的攻击方法出现后,不需要进行攻击特征分析和补充。
附图说明
图1是本发明基于HTTP响应头变化的准确攻击识别方法流程示意图。
具体实施方式
下面结合附图和具体实施方式对本发明作进一步详细的说明。本发明提供的一种基于HTTP响应头变化的准确Web攻击识别方法,包括客户端请求初步判断、客户端请求拦截、客户端提交数据替换、客户端请求数据发送、HTTP响应头对比、依据HTTP响应头对比结果来判断客户端请求是否为攻击等内容,如图1所示,详述如下。
S101、收到客户端HTTP请求进行预判;
S102、如果步骤S101预判结果为疑似攻击;
S103、首先将该请求拦截,将客户端请求数据(通过参数提交的内容)替换为普通内容后发送给服务器;
S104、记录服务器发送的HTTP响应头;
S105、将客户端请求数据(没有替换请求数据,客户端原始请求)发送给服务器;
S106、记录服务器发送的HTTP响应头;
S107、对比步骤S104与S106结果,看两次HTTP响应头是否发生变化;
S108、若发生变化(不包括Content-Lengt),判断本次客户端请求为攻击;
S109、若步骤107对结果未发生变化,判断本次客户端请求为非攻击;
如果步骤S102判断为非攻击,本次客户端请求为非攻击。
例如客户端请求http://example.com/index?id=1,该请求为非攻击,直接将该请求发送到服务器。
例如客户端请求为:
http://example.com/viewSource.action?method:%23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,%23context[%23parameters.obj[0]].getWriter().print(%23parameters.content[0]%2b201%2b20702),1?%23xx:%23request.toString&obj=com.opensymphony.xwork2.dispatcher.HttpServletResponse&content=14998
先将请求替换为http://example.com/viewSource.action?view,发送到服务器,服务器响应头为:
Server:Apache-Coyote/1.1
Content-Type:text/html
Transfer-Encoding:chunked
Date:Tue,14Jun 2016 08:47:36GMT
Connection:close
再发送客户端请求
http://example.com/viewSource.action?method:%23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,%23context[%23parameters.obj[0]].getWriter().print(%23parameters.content[0]%2b201%2b20702),1?%23xx:%23request.toString&obj=com.opensymphony.xwork2.dispatcher.HttpServletResponse&content=14998,发送到服务器,服务器响应头为:
Server:Apache-Coyote/1.1
Content-Length:30
Date:Tue,14Jun 2016 08:48:00GMT
Connection:close
发现两次请求服务器发送的响应头发生了变化(一次有Content-Type:text/html,一次没有),判断该请求为攻击。