用于检测SQL注入的方法和装置与流程

文档序号:21181476发布日期:2020-06-20 17:50阅读:169来源:国知局
本公开的实施例涉及网络安全
技术领域
:,具体涉及用于检测sql注入的方法和装置。
背景技术
::sql(structuredquerylanguage,结构化查询语言)是一种用于操作数据库的语言。sql注入是指把恶意sql命令插入到sql语句中,并在万维网(worldwideweb,web)中的表单提交处、或者输入域名处、或者页面请求处输入插入恶意sql命令的sql语句,从而达到欺骗服务器执行恶意sql命令,以窃取、篡改或者恶意删除数据库中的数据。sql注入检测主要是检测包含有恶意sql命令的sql语句。传统sql注入检测主要依赖于匹配模型库。在一种检测方法中,匹配模型库包括合法sql语句的抽象语法树,合法sql语句即不包含恶意sql命令的sql语句;在另一种检测方法中,匹配模型库包括非法sql语句的抽象语法树,非法sql语句即包含恶意sql命令的sql语句。对一个sql语句进行检测时,首先获取该sql语句的抽象语法树,再对比该抽象语法树与匹配模型库中的抽象语法树,进而得出该sql语句的检测结果。传统sql注入检测方法有以下缺点:1、传统防御方式在规则缺失的情况下,导致sql注入检测失败;2、攻击者在攻击过程中,通过构造bypass(绕过)方法,使得传统防御方式规则集中已有规则失效;3、在传统防御方式中,随着规则集中规则不断增多,导致sql注入检测系统的开发和维护变得困难。技术实现要素:本公开的实施例提出了用于检测sql注入的方法和装置。第一方面,本公开的实施例提供了一种用于检测sql注入的方法,包括:获取待检测的sql语句;将sql语句中的关键信息转换成相应的词法单词,并将词法单词转换成向量;基于词法单词构建抽象语法树,其中,抽象语法树的每个结点与一个向量对应;按照结点的优先级由高到低的顺序从抽象语法树中选择预定第一数目的目标结点,并基于目标结点对应的向量构造特征向量矩阵;将特征向量矩阵输入预先训练的sql注入检测模型,输出sql语句的类别。在一些实施例中,该方法还包括:获取sql语句的注释信息;将注释信息转换成注释向量;基于目标结点对应的向量和注释向量重新构造特征向量矩阵。在一些实施例中,注释信息包括至少一个注释块,该方法还包括:将每注释块转换成一个注释向量,得到注释向量集;从注释向量集中随机选择预定第二数目的注释向量;按照结点的优先级由高到低的顺序从抽象语法树中选择预定第三数目的目标结点,其中,第二数目与第三数目之和等于第一数目;基于所选择的预定第三数目的目标结点对应的向量和所选择的预定第二数目的注释向量重新构造特征向量矩阵。在一些实施例中,该方法还包括:获取训练样本集,其中,训练样本包括样本sql语句和用于表征样本sql语句是否是sql注入的标注信息;对训练样本集中每个训练样本构建一个样本语法树,其中,样本语法树的每个结点与一个向量对应;对于每个样本语法树,按照结点的优先级由高到低的顺序从该样本语法树中选择预定第一数目的目标样本结点,并基于目标样本结点对应的向量构造特征向量矩阵;将各样本语法树构造的特征向量矩阵组成向量空间;将向量空间和标注信息分别作为sql注入检测模型的输入和期望输出,利用机器学习方法训练sql注入检测模型。在一些实施例中,该方法还包括:获取训练样本集,其中,训练样本包括样本sql语句、注释信息和用于表征样本sql语句是否是sql注入的标注信息;对训练样本集中每个训练样本构建一个样本语法树,其中,样本语法树的每个结点与一个向量对应;将训练样本集中的样本注释信息转换成样本注释向量集;从样本注释向量集中随机选择预定第二数目的样本注释向量;对于每个样本语法树,按照结点的优先级由高到低的顺序从该样本语法树中选择预定第三数目的目标样本结点,基于所选择的预定第三数目的目标样本结点对应的向量和所选择的预定第二数目的样本注释向量重新构造特征向量矩阵,其中,第二数目与第三数目之和等于第一数目;将各样本语法树构造的特征向量矩阵组成向量空间;将向量空间和标注信息分别作为sql注入检测模型的输入和期望输出,利用机器学习方法训练sql注入检测模型。在一些实施例中,结点的优先级按以下顺序递减:与预设的高风险普通注入的关键信息相关的结点;与预设的高风险绕过注入的关键信息相关的结点;包含特殊字符的关键信息相关的结点;其余叶子结点;其余非叶子结点。第二方面,本公开的实施例提供了一种用于检测sql注入的装置,包括:获取单元,被配置成获取待检测的sql语句;转换单元,被配置成将sql语句中的关键信息转换成相应的词法单词,并将词法单词转换成向量;构建单元,被配置成基于词法单词构建抽象语法树,其中,抽象语法树的每个结点与一个向量对应;选择单元,被配置成按照结点的优先级由高到低的顺序从抽象语法树中选择预定第一数目的目标结点,并基于目标结点对应的向量构造特征向量矩阵;检测单元,被配置成将特征向量矩阵输入预先训练的sql注入检测模型,输出sql语句的类别。在一些实施例中,选择单元进一步被配置成:获取sql语句的注释信息;将注释信息转换成注释向量;基于目标结点对应的向量和注释向量重新构造特征向量矩阵。在一些实施例中,注释信息包括至少一个注释块,选择单元进一步被配置成:将每注释块转换成一个注释向量,得到注释向量集;从注释向量集中随机选择预定第二数目的注释向量;按照结点的优先级由高到低的顺序从抽象语法树中选择预定第三数目的目标结点,其中,第二数目与第三数目之和等于第一数目;基于所选择的预定第三数目的目标结点对应的向量和所选择的预定第二数目的注释向量重新构造特征向量矩阵。在一些实施例中,该装置还包括第一训练单元,被配置成:获取训练样本集,其中,训练样本包括样本sql语句和用于表征样本sql语句是否是sql注入的标注信息;对训练样本集中每个训练样本构建一个样本语法树,其中,样本语法树的每个结点与一个向量对应;对于每个样本语法树,按照结点的优先级由高到低的顺序从该样本语法树中选择预定第一数目的目标样本结点,并基于目标样本结点对应的向量构造特征向量矩阵;将各样本语法树构造的特征向量矩阵组成向量空间;将向量空间和标注信息分别作为sql注入检测模型的输入和期望输出,利用机器学习装置训练sql注入检测模型。在一些实施例中,该装置还包括第二训练单元,被配置成:获取训练样本集,其中,训练样本包括样本sql语句、注释信息和用于表征样本sql语句是否是sql注入的标注信息;对训练样本集中每个训练样本构建一个样本语法树,其中,样本语法树的每个结点与一个向量对应;将训练样本集中的样本注释信息转换成样本注释向量集;从样本注释向量集中随机选择预定第二数目的样本注释向量;对于每个样本语法树,按照结点的优先级由高到低的顺序从该样本语法树中选择预定第三数目的目标样本结点,基于所选择的预定第三数目的目标样本结点对应的向量和所选择的预定第二数目的样本注释向量重新构造特征向量矩阵,其中,第二数目与第三数目之和等于第一数目;将各样本语法树构造的特征向量矩阵组成向量空间;将向量空间和标注信息分别作为sql注入检测模型的输入和期望输出,利用机器学习装置训练sql注入检测模型。在一些实施例中,结点的优先级按以下顺序递减:与预设的高风险普通注入的关键信息相关的结点;与预设的高风险绕过注入的关键信息相关的结点;包含特殊字符的关键信息相关的结点;其余叶子结点;其余非叶子结点。第三方面,本公开的实施例提供了一种用于检测sql注入的电子设备,包括:一个或多个处理器;存储装置,其上存储有一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现如第一方面中任一的方法。第四方面,本公开的实施例提供了一种计算机可读介质,其上存储有计算机程序,其中,程序被处理器执行时实现如第一方面中任一的方法。本公开的实施例提供的用于检测sql注入的方法和装置,通过将待检测的sql语句中的关键信息转换成词法单词后构建抽象语法树,然后按优选级由高到低的顺序从抽象语法树中选择一定数目的结点构造特征向量矩阵。再将特征向量矩阵输入预先训练的sql注入检测模型,确定出sql语句是否是sql注入。本公开的实施例综合考虑了各种类型的sql注入的特征,能够防止漏检sql注入或误检sql注入,从而提高sql注入检测的准确率。并且由于只提取重要的结点的特征进行检测,因此减少了计算量,提高了检测速度。解决在sql注入攻击检测过程中传统防御方式(基于文本匹配/文本相似性度量的规则)检测准确度低、容易绕过、检测时间开销长等问题。从而提高了网络的安全性。附图说明通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本公开的其它特征、目的和优点将会变得更明显:图1是本公开的一个实施例可以应用于其中的示例性系统架构图;图2是根据本公开的用于检测sql注入的方法的一个实施例的流程图;图3是根据本公开的用于检测sql注入的方法的一个抽象语法树的结构图;图4是根据本公开的用于检测sql注入的方法的又一个实施例的流程图;图5是根据本公开的用于检测sql注入的装置的一个实施例的结构示意图;图6是适于用来实现本公开的实施例的电子设备的计算机系统的结构示意图。具体实施方式下面结合附图和实施例对本公开作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。图1示出了可以应用本公开的用于检测sql注入的方法或用于检测sql注入的装置的实施例的示例性系统架构100。如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如网页浏览器应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。终端设备101、102、103可以是硬件,也可以是软件。当终端设备101、102、103为硬件时,可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、mp3播放器(movingpictureexpertsgroupaudiolayeriii,动态影像专家压缩标准音频层面3)、mp4(movingpictureexpertsgroupaudiolayeriv,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。当终端设备101、102、103为软件时,可以安装在上述所列举的电子设备中。其可以实现成多个软件或软件模块(例如用来提供分布式服务),也可以实现成单个软件或软件模块。在此不做具体限定。服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103发起的网页页面请求提供sql注入检测的后台检测服务器。后台检测服务器可以对接收到的网页页面请求等数据进行分析等处理,确定是否为sql注入,如果不是sql注入,则将网页页面数据反馈给终端设备。需要说明的是,服务器可以是硬件,也可以是软件。当服务器为硬件时,可以实现成多个服务器组成的分布式服务器集群,也可以实现成单个服务器。当服务器为软件时,可以实现成多个软件或软件模块(例如用来提供分布式服务的多个软件或软件模块),也可以实现成单个软件或软件模块。在此不做具体限定。需要说明的是,本公开的实施例所提供的用于检测sql注入的方法一般由服务器105执行,相应地,用于检测sql注入的装置一般设置于服务器105中。应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。继续参考图2,示出了根据本公开的用于检测sql注入的方法的一个实施例的流程200。该用于检测sql注入的方法,包括以下步骤:步骤201,获取待检测的sql语句。在本实施例中,用于检测sql注入的方法的执行主体(例如图1所示的服务器)可以通过有线连接方式或者无线连接方式从用户利用其进行网页浏览的终端接收包括sql语句。待检测的sql语句通过对携带待检测sql语句的超文本传输协议(hypertexttransportprotocol,http)请求进行去噪和解码得到。步骤202,将sql语句中的关键信息转换成相应的词法单词,并将词法单词转换成向量。在本实施例中,组成sql语句的每个词被称为词法单词。示例性的,待检测sql语句是“selectuserfromdb”,select、user、from、db均为词法单词。可通过词法分析将sql语句中的关键信息转换成相应的词法单词。词法分析(lexicalanalysis)是将字符序列转换为单词序列的过程。进行词法分析的程序或者函数叫作词法分析器(lexicalanalyzer,lexer),或叫作扫描器(scanner),词法分析器一般以函数的形式存在,供语法分析器调用。在sql注入检测中,词法分析器可以将sql语句转换为计算机内部可识别符号(词法单词)。例如,在本申请中,sql注入检测装置可以对训练集中的或接收到的sql语句进行词法分析,将sql语句转换为词法单词。可通过现有的词向量转换工具,例如word2vec、连续词袋等将词法单词转换成向量。向量的长度为m,不足m的向量做填充,超过m的向量做截断,m通常取128。步骤203,基于词法单词构建抽象语法树。在本实施例中,可通过语法分析将词法单词作为结点构建抽象语法树。其中,抽象语法树的每个结点与一个向量对应。语法分析(syntacticanalysis)是根据某种给定的形式文法对由单词序列(例如英文单词序列)构成的输入文本进行分析并确定其语法结构的一种过程。语法分析器一般作为编译器或解释器的组件出现,其作用是进行语法检查、并构建由输入的单词组成的数据结构(例如抽象语法树等层次化的数据结构)。在sql注入检测中,语法分析器可以根据语法规则,将词法单词和语法规则符号转换为抽象语法树,其中,树结点之间的连接存在潜在的语义关系和上下文关系。例如,在本申请中,可以对sql语句进行语法分析,生成抽象语法树。抽象语法树(abstractsyntaxtree,ast),或简称语法树,是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言(例如sql)的语法结构,树上的每个结点都表示源代码中的一种结构。但是,ast中的语法并不会表示出真实语法中出现的每个细节,例如,嵌套括号被隐含在树的结构中,并没有以结点的形式呈现,而条件跳转语句可以使用带有两个分支的结点来表示。在本申请中,经过语法分析生成的ast,每个叶子结点表示一个词法单词,每个树结点表示一个语法规则符号,树结点之间的连接存在潜在语义关系和上下文关系。如图3所示为以下语句生成的抽象语法树:select*fromuserwhereusernamelike'%z%'and(selectcount(*)frominformation_schema.tablesgroupbyconcat(user(),floor(rand(0)*2)))步骤204,按照结点的优先级由高到低的顺序从抽象语法树中选择预定第一数目的目标结点,并基于目标结点对应的向量构造特征向量矩阵。在本实施例中,对sql语法树中的结点做提取,按照结点优先级由高到低的顺序进行排序,取前n个结点,不足n个结点时进行填充,超过n个结点时进行截断,n通常取64。以下排序规则的优先级程度递减:1、高风险普通注入点结点组中结点的提取,这里提取的是sql语法树中的一个子树的结点,这个子树是依据现有经验的高风险普通注入点,如and1=1或者and1=2。这些结点是第一优先级。子树包括选择的结点及其子结点,如图3所示的第二行中包括and结点,and的子树中and是父结点,与预设的高风险普通注入的关键信息相关的结点即为and结点及其所有的子结点。2、高风险bypass(绕过)注入点结点组中结点的提取,这里提取的是sql语法树中的一个子树的结点,这个子树是依据现有经验的高风险bypass普通注入点,如111^1^0或者111^1^0。3、包含特殊字符的结点组中结点的提取。例如<<、》》》等特殊字符,可通过白名单或黑名单的方式获取。4、其余叶子结点的提取。指的是除1-3所选择的叶子结点之外的叶子结点。5、其余非叶子结点的提取。指的是除1-3所选择的非叶子结点之外的非叶子结点。步骤205,将特征向量矩阵输入预先训练的sql注入检测模型,输出sql语句的类别。在本实施例中,sql注入检测模型可以是基于神经网络的二分类器。例如,该二分类器可通过若干个一维卷积层进行特征提取,通过若干个最大池化层对特征进行压缩。二分类器的网络结构如下所示:a)第一个卷积层使用64个大小为3的卷积核,使用relu函数作为激活函数,后接下一个卷积层;b)第二个卷积层使用64个大小为3的卷积核,使用relu函数作为激活函数,后接下一个最大池化层;c)最大池化层,过滤器大小为3,后接下一个卷积层;d)重复a)b)c)3个步骤若干次。最后接全连接层并加入dropout,dropout概率为0.1~0.3,全连接层输出维度为2,使用sofamax作为激活函数。本公开的实施例综合考虑了各种类型的sql注入的特征,能够防止漏检sql注入或误检sql注入,从而提高sql注入检测的准确率。并且由于只提取重要的结点的特征进行检测,因此减少了计算量,提高了检测速度。解决在sql注入攻击检测过程中传统防御方式(基于文本匹配/文本相似性度量的规则)检测准确度低、容易绕过、检测时间开销长等问题。从而提高了网络的安全性。sql注入检测模型可通过如下步骤训练:步骤2051,获取训练样本集。在本实施例中,用于检测sql注入的方法的执行主体(例如图1所示的服务器)可以通过有线连接方式或者无线连接方式从用户利用其进行网页浏览的终端接收训练样本集。其中,训练样本包括样本sql语句和用于表征样本sql语句是否是sql注入的标注信息。正样本标记为1,负样本标记为0。训练样本还包括样本sql语句转换的词法单词和词法单词转换成的向量。步骤2052,对训练样本集中每个训练样本构建一个样本语法树。在本实施例中,该步骤与步骤203基本相同,因此不再赘述。步骤2053,对于每个样本语法树,按照结点的优先级由高到低的顺序从该样本语法树中选择预定第一数目的目标样本结点,并基于目标样本结点对应的向量构造特征向量矩阵。在本实施例中,该步骤与步骤204基本相同,因此不再赘述。步骤2054,将各样本语法树构造的特征向量矩阵组成向量空间。在本实施例中,所有样本的数量为k,构成一个m*n*k的向量空间。步骤2055,将向量空间和标注信息分别作为sql注入检测模型的输入和期望输出,利用机器学习方法训练sql注入检测模型。在本实施例中,采用有监督训练的方式训练sql注入检测模型。训练方法为现有技术,因此不再赘述。进一步参考图4,其示出了用于检测sql注入的方法的又一个实施例的流程400。该用于检测sql注入的方法的流程400,包括以下步骤:步骤401,获取待检测的sql语句。步骤402,将sql语句中的关键信息转换成相应的词法单词,并将词法单词转换成向量。步骤403,基于词法单词构建抽象语法树。步骤401-403与步骤201-203基本相同,因此不再赘述。步骤404,获取sql语句的注释信息。在本实施例中,sql语句可能伴随着注释信息。注释信息标识为/**/。例如,select*fromuserswhereuid=111/*!union/*!select/*!1,(select/*!password/*!from/*!users/*!limit/*!0,1),3*/。一个sql语句的注释信息可以有多块,每块以/**/或#等注释标识区分。步骤405,将注释信息转换成注释向量。在本实施例中,在词法分析的扫描过程中,对sql语句中的注释信息进行存储,单个注释块转换成一个向量,长度为m,同时按照前述规则进行填充或截断。步骤406,按照结点的优先级由高到低的顺序从抽象语法树中选择目标结点,并基于目标结点对应的向量和注释向量构造特征向量矩阵。在本实施例中,如果有多个注释块,则从注释向量集中随机选取p个,按照步骤204所述的方法从排序后的结点中取前q个,转换成长度为m的向量,通常p<=8,q=n-p,n通常取64,不足n个结点时进行填充,超过n个结点时进行截断。p、q、n的取值和sql注入检测模型选择的训练样本有关。步骤407,将特征向量矩阵输入预先训练的sql注入检测模型,输出sql语句的类别。在本实施例中,预先设计注释向量、结点对应的向量的长度,选择相应长度的训练样本训练出sql注入检测模型。sql注入检测模型的网络结构与步骤205中的一样,区别在于训练样本不同,因此在进行检测时,输入的向量矩阵也不同。sql注入检测模型可通过如下步骤训练:步骤4071,获取训练样本集。在本实施例中,用于检测sql注入的方法的执行主体(例如图1所示的服务器)可以通过有线连接方式或者无线连接方式从用户利用其进行网页浏览的终端接收训练样本集。其中,训练样本包括样本sql语句、注释信息和用于表征样本sql语句是否是sql注入的标注信息。正样本标记为1,负样本标记为0。训练样本还包括样本sql语句转换的词法单词和词法单词转换成的向量。步骤4072,对训练样本集中每个训练样本构建一个样本语法树。在本实施例中,该步骤与步骤203基本相同,因此不再赘述。步骤4073,将训练样本集中的样本注释信息转换成样本注释向量集。在本实施例中,该步骤与步骤405基本相同,因此不再赘述。步骤4074,从样本注释向量集中随机选择预定第二数目的样本注释向量。在本实施例中,可将样本注释向量集中样本注释向量随机打散后随机选择预定第二数目的样本注释向量。第二数目记为p。步骤4075,对于每个样本语法树,按照结点的优先级由高到低的顺序从该样本语法树中选择所述预定第三数目的目标样本结点,基于所选择的预定第三数目的目标样本结点对应的向量和所选择的预定第二数目的样本注释向量重新构造特征向量矩阵。在本实施例中,该步骤与步骤406基本相同,因此不再赘述。第二数目与第三数目(记为q)之和等于第一数目(记为n)。步骤4076,将各样本语法树构造的特征向量矩阵组成向量空间。在本实施例中,所有样本的数量为k,构成一个m*n*k的向量空间。步骤4077,将向量空间和标注信息分别作为sql注入检测模型的输入和期望输出,利用机器学习方法训练sql注入检测模型。在本实施例中,采用有监督训练的方式训练sql注入检测模型。训练方法为现有技术,因此不再赘述。从图4中可以看出,与图2对应的实施例相比,本实施例中的用于检测sql注入的方法的流程400体现了对注释信息进行sql注入检测的步骤。由此,本实施例描述的方案可以引入更丰富的检测手段,从而防止漏检,进一步提高网络安全性。进一步参考图5,作为对上述各图所示方法的实现,本公开提供了一种用于检测sql注入的装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。如图5所示,本实施例的用于检测sql注入的装置500包括:获取单元501、转换单元502、构建单元503、选择单元504、检测单元505。其中,获取单元501,被配置成获取待检测的sql语句;转换单元502,被配置成将sql语句中的关键信息转换成相应的词法单词,并将词法单词转换成向量;构建单元503,被配置成基于词法单词构建抽象语法树,其中,抽象语法树的每个结点与一个向量对应;选择单元504,被配置成按照结点的优先级由高到低的顺序从抽象语法树中选择预定第一数目的目标结点,并基于目标结点对应的向量构造特征向量矩阵;检测单元505,被配置成将特征向量矩阵输入预先训练的sql注入检测模型,输出sql语句的类别。在本实施例中,用于检测sql注入的装置500的获取单元501、转换单元502、构建单元503、选择单元504、检测单元505具体处理可以参考图2对应实施例中的步骤201、步骤202、步骤203、步骤204和步骤205。在本实施例的一些可选的实现方式中,选择单元504进一步被配置成:获取sql语句的注释信息;将注释信息转换成注释向量;基于目标结点对应的向量和注释向量重新构造特征向量矩阵。在本实施例的一些可选的实现方式中,注释信息包括至少一个注释块,选择单元进一步被配置成:将每注释块转换成一个注释向量,得到注释向量集;从注释向量集中随机选择预定第二数目的注释向量;按照结点的优先级由高到低的顺序从抽象语法树中选择预定第三数目的目标结点,其中,第二数目与第三数目之和等于第一数目;基于所选择的预定第三数目的目标结点对应的向量和所选择的预定第二数目的注释向量重新构造特征向量矩阵。在本实施例的一些可选的实现方式中,装置500还包括第一训练单元(附图中未示出),被配置成:获取训练样本集,其中,训练样本包括样本sql语句和用于表征样本sql语句是否是sql注入的标注信息;对训练样本集中每个训练样本构建一个样本语法树,其中,样本语法树的每个结点与一个向量对应;对于每个样本语法树,按照结点的优先级由高到低的顺序从该样本语法树中选择预定第一数目的目标样本结点,并基于目标样本结点对应的向量构造特征向量矩阵;将各样本语法树构造的特征向量矩阵组成向量空间;将向量空间和标注信息分别作为sql注入检测模型的输入和期望输出,利用机器学习装置训练sql注入检测模型。在本实施例的一些可选的实现方式中,装置500还包括第二训练单元(附图中未示出),被配置成:获取训练样本集,其中,训练样本包括样本sql语句、注释信息和用于表征样本sql语句是否是sql注入的标注信息;对训练样本集中每个训练样本构建一个样本语法树,其中,样本语法树的每个结点与一个向量对应;将训练样本集中的样本注释信息转换成样本注释向量集;从样本注释向量集中随机选择预定第二数目的样本注释向量;对于每个样本语法树,按照结点的优先级由高到低的顺序从该样本语法树中选择预定第三数目的目标样本结点,基于所选择的预定第三数目的目标样本结点对应的向量和所选择的预定第二数目的样本注释向量重新构造特征向量矩阵,其中,第二数目与第三数目之和等于第一数目;将各样本语法树构造的特征向量矩阵组成向量空间;将向量空间和标注信息分别作为sql注入检测模型的输入和期望输出,利用机器学习装置训练sql注入检测模型。在本实施例的一些可选的实现方式中,结点的优先级按以下顺序递减:与预设的高风险普通注入的关键信息相关的结点;与预设的高风险绕过注入的关键信息相关的结点;包含特殊字符的关键信息相关的结点;其余叶子结点;其余非叶子结点。下面参考图6,其示出了适于用来实现本公开的实施例的电子设备(例如图1中的服务器或终端设备)600的结构示意图。本公开的实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、pda(个人数字助理)、pad(平板电脑)、pmp(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字tv、台式计算机等等的固定终端。图6示出的终端设备/服务器仅仅是一个示例,不应对本公开的实施例的功能和使用范围带来任何限制。如图6所示,电子设备600可以包括处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(rom)602中的程序或者从存储装置608加载到随机访问存储器(ram)603中的程序而执行各种适当的动作和处理。在ram603中,还存储有电子设备600操作所需的各种程序和数据。处理装置601、rom602以及ram603通过总线604彼此相连。输入/输出(i/o)接口605也连接至总线604。通常,以下装置可以连接至i/o接口605:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(lcd)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置608;以及通信装置609。通信装置609可以允许电子设备600与其他设备进行无线或有线通信以交换数据。虽然图6示出了具有各种装置的电子设备600,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。图6中示出的每个方框可以代表一个装置,也可以根据需要代表多个装置。特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置609从网络上被下载和安装,或者从存储装置608被安装,或者从rom602被安装。在该计算机程序被处理装置601执行时,执行本公开的实施例的方法中限定的上述功能。需要说明的是,本公开的实施例所述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开的实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开的实施例中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、rf(射频)等等,或者上述的任意合适的组合。上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:该方法的一具体实施方式包括:获取待检测的sql语句;将sql语句中的关键信息转换成相应的词法单词,并将词法单词转换成向量;基于词法单词构建抽象语法树,其中,抽象语法树的每个结点与一个向量对应;按照结点的优先级由高到低的顺序从抽象语法树中选择预定第一数目的目标结点,并基于目标结点对应的向量构造特征向量矩阵;将特征向量矩阵输入预先训练的sql注入检测模型,输出sql语句的类别。可以以一种或多种程序设计语言或其组合来编写用于执行本公开的实施例的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。描述于本公开的实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括获取单元、转换单元、构建单元、选择单元、检测单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,获取单元还可以被描述为“获取待检测的sql语句的单元”。以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1