当前位置:首页 期刊杂志

基于HttpModule的防SQL注入策略

时间:2024-09-03

◆张 勇 安静鑫

(山东轻工职业学院信息中心 山东 255300)

基于HttpModule的防SQL注入策略

◆张 勇 安静鑫

(山东轻工职业学院信息中心 山东 255300)

SQL注入是入侵Web服务器最常见的行为,本文提出了基于HttpModule的防注入策略,在HttpModule管道中拦截用户请求,用正则表达式和XML配置信息,分析用户请求的合法性,对非法请求采取中止请求、屏蔽IP等措施,从而防止SQL注入,这种方法具有灵活高效、简便易用的特点。

SQL注入; HttpModule; 用户请求过滤; IP屏蔽

0 引言

目前大多数企事业单位建设了本部门的 Web服务器,这些服务器多数使用Windows Server和asp.net、php等脚本语言架设网站,经过多年的发展,网站的布局越来越合理、功能越来越完备,但是安全问题却越来越突出,被攻击事件层出不穷,有的数据被窃取导致严重后果,例如徐玉玉电信诈骗案;有的网页被篡改,被链接到木马、游戏和境外网页上,造成恶劣影响。

因此网站管理员越发重视 Web服务器安全问题,为此采取了诸多防范措施,例如购买安全狗、杀毒软件、加固 Web服务器、安装Web防火墙、查找SQL注入漏洞等等,其中防范SQL注入攻击对管理员的业务水平要求很高,防范难度很大,本文研究重点就是使用HttpModule实时检测和防范SQL注入攻击,以达到保护Web服务器的目的。

由于国内多数企事业单位使用windows server和IIS搭建网站,因此本文的研究方法是针对windows server + IIS+ASP.NET环境的,但是设计思路同样适合于linux下的apache和Tomcat环境。

本文使用的术语说明:

(1)Web网站:是指假设在Web服务器上,供用户访问的网页集合。

(2)Web服务器:是指架设Web网站的服务器平台,因此保护网站实际上就是保护服务器。

(3)用户请求:是指用户使用浏览器或其他软件向Web网站发出的的http请求,主要分为get和post两种,请求中包含了用户IP、浏览器版本、提交的参数等信息。

1 防SQL注入攻击措施

1.1 现有措施

目前,Web服务器防范SQL注入攻击主要依靠IT公司推出的各种WAF(Web应用防护系统),WAF可分为三类:

(1)硬件Web防火墙:部署简单,可承受较高的吞吐量,但是价格昂贵,中小网站负担不起。

(2)软件Web防火墙:界面友好,功能比较全面,如扫描恶意木马文件、防篡改等功能,价格低廉,但是占用服务器内存较大,软件兼容不够好、不够稳定。

(3)云WAF:部署简单,维护成本低,由于由云端负责防护规则的更新和维护,用户的工作量极少,但是由于所有访问数据都会先经过云端,所以保密性差,不适用于多数企事业单位。

无论哪一类WAF目前都存在一些不足,主要表现在:

(1)配置功能不够全面: IT公司提供的产品是通用的,而国内数以万计的网站安全要求各不相同,很多个性化要求无法满足,假设用户希望能自定义正则表达式分析get和post请求的内容,这样的要求目前没有哪一款WAF能够满足。

(2)屏蔽IP的功能不足。虽然多数WAF提供了IP黑名单功能,但主要依靠管理员手动添加,防范作用不大,管理员更希望在网站运行时,能自动屏蔽非法IP,甚至能建立windows防火墙的规则屏蔽之。

鉴于上述WAF存在的不足,本文提出了基于HttpModule模块的SQL防注入策略,它不但可以防御SQL注入,还可以阻止扫描网站,在一定程度上代替了WAF的作用,实践证明本策略设计的软件简便灵活,过滤效果显著。

1.2 本方法创新点

本策略创新点如下:

(1)使用XML文件自定义配置,简单灵活。

(2)动态、实时屏蔽非法IP。

(3)使用正则表达式过滤非法请求。

2 用户请求处理流程

正常情况下,用户打开一个网页或者点击链接就是在向Web网站发送若干请求,用户请求在IIS服务器的处理过程比较复杂,以下仅作简要说明。

当用户通过浏览器发送http请求时,该请求会传给Web服务器上的w3wp.exe进程,该进程构造一个HttpRuntime类的实例,该实例通过调用ProcessRequest方法产生一个HttpContext实例,从编程者角度看这是一个最重要的实例,因为可以通过它获得用户请求。之后用户请求将通过一个“HttpModule模块管道”,之所以称为管道是因为用户请求将经过一系列HttpModule模块,每个模块可以拦截用户请求进行处理。

“模块管道”的终点是 HttpHandler,用户请求穿过HttpModule模块管道后,最后到达HttpHandle模块,HttpHandle返回用户请求的网页内容,通过用户浏览器解析显示出来,如图1所示。

图1 模块管道

通过以上描述,得到以下信息:

(1)可以编写一个HttpModule模块,作为“模块管道”的一部分,它是用户请求的必经节点。

(2)在HttpModule模块内,通过访问HttpContext实例获得用户请求,然后分析是否存在注入。

3 设计思路

3.1 获取用户请求

使用 C#语言编写一个 HttpModule模块,模块中必须含有Application_BeginRequest(Object source, EventArgs e)方法,参数source就是传递来的用户请求,在方法中对它进行类型转换,语句如下:

HttpRequest request=((HttpApplication)source).Context.Request,这样就得到了HttpRequest类的实例request,request中包含了用户请求的信息,根据request的RequestType属性可知当前请求属于哪一种,本文重点分析get请求,post请求的分析方法类似。

3.2 判断SQL注入攻击

首先要明确SQL注入攻击的特征是什么。根据经验,黑客主要通过get参数和post提交两种方式进行SQL注入攻击,以get参数方式攻击为例,具体表现是在get参数中使用各类非法字符,精心构造各种sql命令传递给Web服务器,根据返回的结果,获得数据库或服务器的敏感信息进而控制整个 Web服务器,这就是SQL注入的实质。

由此可知,检查request实例含有的get参数,就可以判断当前request是否存在SQL攻击,要检查的符号包括:单引号、圆括号、方括号、尖括号、花括号、星号、分号等;要检查的SQL关键词包括:select、union、where、javascript、group、administrator、cmdshell、alert等,由于数量较多,这里不能一一列出,如果get参数中含有这些符号或关键词,就可以认定当前请求为SQL注入攻击。

但是这样的简单检查误报率较高,有时候合法参数中也会含有select,上述检查会将这个合法请求误判为SQL攻击,这时候可以使用正则表达式进一步判断,例如:.*(select).*(from|where),它表示get参数中select和from或where同时存在,才判断是SQL攻击,这就大大降低了误报率,只是在反应时间上稍慢而已,用户几乎感觉不到。

3.3 判断恶意扫描

除了SQL注入攻击,入侵者还经常使用扫描工具对网站进行高频率扫描,网站会在数秒内接收到来自某个IP的上千次的get请求,因此有必要过滤这些高频扫描。算法设计如下所示:

(1)首先设定一个单位时间访问上限,规定本网站每N秒最多允许接收某IP的M个get请求。

(2)在HttpModule模块中定义一个静态变量,用来记录每个IP的访问次数,每收到一个get请求,就将其IP来访次数加1。

(3)模块中定义一个Timer计数器,每隔N秒检查所有被记录的IP的访问次数,若发现某个IP发送的请求数量高于限定值M,就认定此IP在扫描网站,应该禁止此IP一段时间。

需要注意的是,防止高频扫描可能会禁止蜘蛛爬虫抓取网页,影响网站收录。

3.4 配置XML

为了防御变化多端的SQL注入,本策略使用XML实现灵活配置,XML中应该至少含有以下信息。

(1)SQL注入可能出现的非法符号、SQL关键词,例如单引号、分号、cmdshell、system32等;

(2)用来检查 SQL注入的正则表达式集合,例如.*(select).*(from|where);

(3)异常日志文件路径、SQL注入的来源IP记录日志等;

(4)用于判断恶意扫描的时间间隔和访问次数上限,例如可以分别设为60秒和500次;

(5)被检查的请求对象,例如asp、php网页;

(6)IP白名单和URL白名单,是指那些不需要检测和过滤的IP和URL集合;

(7)IP的禁止时间长度,可以设为几分钟甚至几个小时,最终应该解禁。

3.5 屏蔽非法IP

屏蔽IP,主要采用两种方式:

(1)禁止http访问本网站:检查每个请求的来源IP,若来自被屏蔽的IP,直接终止请求即可。

(2)禁止访问本服务器:通过执行netsh.exe命令,在windows防火墙上添加规则,例如:netsh advfirewall firewall add rule name="IP1" dir=in action=block remoteIP=24.105.9.201,此命令将彻底禁止24.105.9.201访问Web服务器。

3.6 安装部署和过滤效果

(1)软件安装

将上述算法编写的dll文件和XML配置文件一同放置在网站bin目录下,然后在Web.config中添加如下节点即可。

当第一个用户请求到来时,会从XML文件中读取信息赋值给一组静态变量,以后每当用户请求到来,不再读取XML文件,直接根据静态变量的值分析请求的合法性,执行速度很快。

将XML文件放置在网站bin目录下具有另一个优点,每当XML发生改变,ASP.NET就会自动重新加载dll程序,无需重启网站和IIS,十分方便。

(2)过滤效果

图2是dll程序记录的一部分过滤日志,分析日志发现,SQL注入攻击频繁发生且变化多端,只有使用正则表达式才能保证高效全面的过滤。

图2 SQL过滤日志

4 结语

本文提出的基于HttpModule拦截SQL注入攻击的方法,灵活高效、简便易用,在一定程度上可以替代WAF且完全免费,适用于基于ASP.NET架构的Web服务器。

[1] 张慧琳,邹维.网页木马机理与防御技术[J].软件学报,2013.

[2] 王云,郭外萍.Web项目中的SQL注入问题研究与防范方法 [J].计算机工程与设计,2010.

[3] 杨小丽,袁丁等.防SQL注入攻击的数据库驱动设计与实现[J].计算机工程与设计,2010.

[4] 梁玲.网页木马植入与防范技术研究[J].太原师范学院学报(自然科学版),2010.

[5] 黄景文. SQL注入攻击的一个新的防范策略[J].微计算机信息,2008.

[6] 陈小兵,张汉煜,骆力明等.SQL注入攻击及其防范检测技术研究[J].计算机工程与应用,2007.

[7] 蒋继娅,刘彤,王树威等.Web应用中的SQL注入攻击与防护方案研究[J].计算机安全,2008.

[8] 王攻明,吴华瑞等.正则表达式在电子政务客户端校验中的应用[J].计算机工程,2007.

淄博市科技创新项目(编号:2016kj010042);山东轻工职业学院院级项目(编号:2016GC01)。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!