论文部分内容阅读
随着互联网技术的快速发展,基于数据库的Web应用程序己经广泛应用于企业的各种业务系统中。然而由于人为和技术等因素限制,使得Web应用程序存在大量安全隐患。在影响Web应用程序安全的诸多因素中,SQL(Structured Query Language,SQL)注入攻击是最常见且危害最广的攻击,因此,如何有效的防御SQL注入攻击成为保证Web应用程序安全性的关键。 近几年来,对于SQL注入攻击防御的研究已经取得一些进展,但现有的SQL注入攻击防御措施仍存在局限性。首先,用户输入过滤措施存在对正常数据的误报问题和对恶意数据的漏报问题。用户输入过滤措施对所有的数据采用相同的方法进行过滤,而且不允许数据中包含SQL关键字,但是以Post方式提交到服务端的数据允许包含关键字,这就造成了对正常数据的误报问题。用户输入过滤措施采用的过滤方法,只能过滤常见的SQL注入攻击,无法过滤未知攻击或着多变的攻击,这就造成了对恶意数据的漏报问题。其次,语法结构比较措施存在检测效率低的问题。语法结构比较措施通过在Web应用程序的后台数据库中维持一个SQL语句主文件(SQLMF)来和Web应用程序运行时动态产生的SQL语句进行比较,检测是否发生SQL注入攻击,当SQLMF中SQL语句的数量比较大时,会使得匹配的效率降低,匹配检测需要两个过程,因此匹配检测过程也是比较繁琐的。本文对SQL注入攻击防御中存在的上述问题进行了研究,主要工作如下: (1)针对用户输入过滤措施存在对正常数据的误报问题,提出一种基于Http请求分类的用户输入过滤措施,该措施对通过Post方式提交的数据采取基于规则的方法进行过滤,对通过Get方式提交的数据先采取基于关键字的方法进行过滤,然后采用基于规则的方法过滤,从而避免了误报问题。而针对用户输入过滤措施存在对恶意数据的漏报问题,只要增加语法结构比较措施即可,因为语法结构比较措施可以从语法结构的角度预防未知攻击或着多变的攻击。 (2)针对语法结构比较措施存在检测效率低的问题,提出一种基于参数化分类的动态查询匹配措施,首先把主文件SQL语句中的用户输入采用参数占位符替换,然后根据SQL语句操作类型不同,可以把原主文件划分为多个新的主文件,这样主文件的大小得到了降低,而且匹配检测阶段也进行了简化,只进行精确匹配检测,不需要模糊匹配检测,从而提高了检测效率。 (3)基于以上两种措施,提出一种基于分类的SQL注入攻击双层防御模型。该模型包括输入过滤模块和语法比较模块,并以J2EE平台的Web应用程序为防御的对象。本模型利用Filter程序实现了对用户输入数据的拦截过滤,借助Antlr工具实现了对动态 SQL语法结构的实时检查。最后实验结果表明,该防御模型对SQL注入攻击有较好的防御能力,可以有效的降低用户输入过滤的误报率和漏报率,而且提高了语法结构比较措施的检测效率。