1.基于静态和动态执行的二阶SQL注入防御和检测方法,其特征在于:包括静态分析模块和动态执行模块,所述静态分析模块对SQL语句添加标识符;所述动态执行模块是基于代理的作用于web应用执行过程中,用于解析静态分析模块添加的标识符,识别出SQL语句中包含的攻击字符,并使用字符转义或字符截取的手段对其进行防御。
2.根据权利要求1所述的基于静态和动态执行的二阶SQL注入防御和检测方法,其特征在于:所述静态分析模块操作步骤如下:S1、扫描Web应用源码,根据SQL执行函数定位源代码中的SQL语句并判别其所属的语句类型,然后通过SQL语句第一个保留字映射为其添加类型标识符T;
S2、根据SQL语句的条件保留字cond、条件连接保留字conn和逻辑操作符保留字oper划分SQL语句,通过类型标识符T进行提取出所有的与SQL注入相关的变量称为χ;
S3、通过正则表达式定位χ中各个变量的填充语句确定其数据源并以ψ作为数据源标识符;
S4、利用预设明文θ和私钥pKey生成cond、conn和oper的标识符φ,并修改原SQL语句形成句内标记;
S5、组合标识符T、ψ和明文θ,形成SQL语句的头标记Ht。
3.根据权利要求2所述的基于静态和动态执行的二阶SQL注入防御和检测方法,其特征在于:所述步骤S1中类型标识符T与SQL语句第一个保留字关系如下:
4.根据权利要求3所述的基于静态和动态执行的二阶SQL注入防御和检测方法,其特征在于:所述步骤S2中条件保留字cond、条件连接保留字conn和逻辑操作符保留字oper与T的关系如下:
5.根据权利要求4所述的基于静态和动态执行的二阶SQL注入防御和检测方法,其特征在于:所述步骤S3中数据源ψ=0、1或2,其取值满足如下条件:
0‑常量,是指变量在当前SQL语句中是由固定的字符或者数字构成的;
1‑用户的输入值,是指变量是通过用户发起的GET请求、POST请求或获取外部文件系统用户的预设值;
2‑非用户输入值,是指变量是通过SQL语句从后台数据库读取的值、从Cookie,Session中取值或获取上传文件的文件名,该种方式获取的值和二阶SQL注入密切相关。
6.根据权利要求5所述的基于静态和动态执行的二阶SQL注入防御和检测方法,其特征在于:所述步骤S4中句内标识符φ由预设明文θ和私钥pKey是生成的,使用了MD5算法和异或操作,生成公式如下:
7.根据权利要求6所述的基于静态和动态执行的二阶SQL注入防御和检测方法,其特征在于:所述步骤S5中SQL语句的头标记Ht公式为:Ht=[existT+ψ1+...+ψn+θ] (6)。
8.根据权利要求7所述的基于静态和动态执行的二阶SQL注入防御和检测方法,其特征在于:所述动态分析模块操作步骤如下:K1、通过代理拦截含有标识符的SQL语句,提取SQL语句的Ht中的SQL语句类型T、数据源标识符ψ和明文θ;
K2、根据θ和pKey计算出保留字标识符φ解析SQL语句并提取出包含真实值的变量集V;
K3、遍历V,对单个vi进行恶意字符的检测,通过ψ和vi是否含有改变SQL语句语义的字符来综合检测SQL注入漏洞;如果被检测为SQL注入漏洞,则对该vi进行恶意字符的防御操作,使SQL语句保持其本质语义,以达到防御的目的;
K4、移除SQL语句中的标识符,将其恢复成可被数据库解析执行的标准SQL。
9.根据权利要求8所述的基于静态和动态执行的二阶SQL注入防御和检测方法,其特征在于:所述步骤K3中恶意字符的防御操作是先判断vi的数据类型,若为字符类型,通过字符转义手段进行防御;若为数字类型,则通过字符截取的手段进行防御。