CN110362597A - 一种结构化查询语言sql注入检测方法及装置 - Google Patents
一种结构化查询语言sql注入检测方法及装置 Download PDFInfo
- Publication number
- CN110362597A CN110362597A CN201910588074.4A CN201910588074A CN110362597A CN 110362597 A CN110362597 A CN 110362597A CN 201910588074 A CN201910588074 A CN 201910588074A CN 110362597 A CN110362597 A CN 110362597A
- Authority
- CN
- China
- Prior art keywords
- keyword
- ast
- sequence
- keywords
- sql statement
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2452—Query translation
- G06F16/24522—Translation of natural language queries to structured queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Abstract
本申请提供一种结构化查询语言SQL注入检测方法及装置。该方法对SQL语句进行预处理,将SQL语句转换为至少两个向量,并将至少两个向量输入神经网络模型,从而得到SQL语句是否包含SQL注入的检测结果。具体地,该方法包括:将SQL语句转换为抽象语法树AST;遍历该AST,将该AST转换为关键字序列;确定表示每个关键字的向量;将至少两个向量输入神经网络模型,得到该SQL语句的检测结果。上述方法能够减少人工分析,提高识别精度,降低误报率。
Description
技术领域
本发明涉及网络安全技术领域,尤其涉及一种结构化查询语言SQL注入检测方法及装置。
背景技术
结构化查询语言(structured query language,SQL)是一种用于操作数据库的语言。SQL注入是指把恶意SQL命令插入到SQL语句中,并在万维网(world wide web,Web)中的表单提交处、或者输入域名处、或者页面请求处输入插入恶意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语句生成抽象语法树AST,生成的所述AST包括至少两个关键字,每个关键字为所述AST的一个节点;检测装置确定表示该至少两个关键字的至少两个向量,每个关键字由该至少两个向量中的一个表示;检测装置将该至少两个向量输入神经网络模型,得到所述SQL语句的检测结果。
在本申请提供的方案中,检测装置利用接收到SQL语句生成AST,进而转换为至少两个向量,并将至少两个向量输入神经网络模型,得到SQL语句检测结果,能够减少人工分析,提高识别精度,降低漏报误报率。
结合第一方面,在第一方面的一种可能的实现方式中,所述至少两个关键字中存在至少一对具有父子关系的关键字,在确定表示所述至少两个关键字的至少两个向量之前:检测装置遍历所述AST,将所述AST转换为序列,所述序列包括按照顺序排列的所述至少两个关键字,且所述序列中,所述至少两个关键字中的父关键字位于所述父关键字的子关键字之前;检测装置将所述至少两个向量输入神经网络模型包括:检测装置按照各个向量对应的关键字在所述序列中的顺序,将所述至少两个向量输入神经网络模型。
在本申请提供的方案中,检测装置将AST转换为具有顺序的序列,进一步将该序列中的各个关键字替换为对应的向量并按照序列中的顺序将各个向量输入到神经网络模型,能够进一步的提高识别精度,提高SQL语句的检测准确性。
结合第一方面,在第一方面的一种可能的实现方式中,所述至少两个关键字中的不同关键字由不同向量表示。
在本申请提供的方案中,对于SQL语句生成的AST中,AST中的每一个关键字只存在唯一的一个向量与其对应,即AST中存在多少个关键字,就要输入对应数量的向量到神经网络模型。
结合第一方面,在第一方面的一种可能的实现方式中,检测装置根据所述至少两个关键字查询语义表,确定所述至少两个关键字对应的至少两个向量;语义表的确定方法包括:检测装置获取多条SQL语句;检测装置将所述多条SQL语句转换为多个AST,所述多个AST包括关键字集合,所述关键字集合包括所述至少两个关键字;检测装置利用语义学习模型学习所述关键字集合,得到所述关键字集合对应的向量集合,并将所述关键字集合和所述向量集合记录至所述语义表。
在本申请提供的方案中,检测装置通过获取多条SQL语句,并将其转换为多个AST,进而得到关键字集合,然后将关键字集合输入语义学习模型进行学习得到向量集合,最终得到语义表。该方式,通过利用语义学习模型得到的语义表中包括待检测SQL语句中的关键字对应的向量,可以直接从该语义表中找到待检测SQL语句对应的向量,能够有效实现待检测SQL语句到向量的转换,以满足神经网络模型检测的需要。
可选的,语义学习模型可以是CBOW模型。
结合第一方面,在第一方面的一种可能的实现方式中,检测装置遍历所述多个AST,得到多个序列,所述多个序列包括所述关键字集合,所述多个序列中的每个序列中的子关键字位于所述子关键字的父关键字之后;利用语义学习模型学习所述多个序列。
在本申请提供的方案中,语义模型学习的是序列,即输入语义模型的是有顺序的关键字,这样可以更好的学习到SQL语句的语义信息和上下文信息,进而可以进一步的提高识别精度和检测准确性。
结合第一方面,在第一方面的一种可能的实现方式中,检测装置将接收到的所述SQL语句中的至少一个自定义关键字替换为至少一个标准关键字,将所述替换后的SQL语句转换为所述AST。
在本申请提供的方案中,SQL语句中可能存在不是标准词法库中的自定义词法符号(即自定义关键字),检测装置可以将其替换为标准词法库中的标准词法符号(即标准关键字)。通过这种方式,可以减少词向量空间大小,进而减小复杂度,提高检测效率。
结合第一方面,在第一方面的一种可能的实现方式中,检测装置利用预设算法遍历所述AST,所述预设算法包括深度优先遍历算法或广度优先遍历算法。
在本申请提供的方案中,检测装置利用深度优先遍历算法或广度优先遍历算法遍历AST得到序列,该序列中的关键字是具有顺序的,该顺序是由所选用的遍历算法决定的,即采用不同的算法,得到的序列中的关键字的顺序是不同的。
结合第一方面,在第一方面的一种可能的实现方式中,所述神经网络模型包括长短期记忆LSTM神经网络模型。
在本申请提供的方案中,检测装置利用LSTM神经网络模型对SQL语句进行检测,可以更好的利用SQL语句的语义信息和上下文信息进行检测,提高识别精度和检测准确性。
第二方面,本申请提供了一种SQL注入检测装置,包括:收发模块,用于接收SQL语句;处理模块,用于:根据接收到的所述SQL语句生成抽象语法树AST,生成的所述AST包括至少两个关键字,每个关键字为所述AST的一个节点;确定表示所述至少两个关键字的至少两个向量,每个关键字由所述至少两个向量中的一个表示;将所述至少两个向量输入神经网络模型,得到所述SQL语句的检测结果。
结合第二方面,在第二方面的一种可能的实现方式中,所述至少两个关键字中存在至少一对具有父子关系的关键字,所述处理模块,还用于遍历所述AST,将所述AST转换为序列,所述序列包括按照顺序排列的所述至少两个关键字,且所述序列中,所述至少两个关键字中的父关键字位于所述父关键字的子关键字之前;所述处理模块,还用于按照各个向量对应的关键字在所述序列中的顺序,将所述至少两个向量输入神经网络模型。
结合第二方面,在第二方面的一种可能的实现方式中,所述至少两个关键字中的不同关键字由不同向量表示。
结合第二方面,在第二方面的一种可能的实现方式中,所述检测装置还包括查询模块,用于根据所述至少两个关键字查询语义表,确定所述至少两个关键字对应的至少两个向量;所述处理模块,还用于:获取多条SQL语句;将所述多条SQL语句转换为多个AST,所述多个AST包括关键字集合,所述关键字集合包括所述至少两个关键字;利用语义学习模型学习所述关键字集合,得到所述关键字集合对应的向量集合,并将所述关键字集合和所述向量集合记录至所述语义表。
结合第二方面,在第二方面的一种可能的实现方式中,所述处理模块,还用于:遍历所述多个AST,得到多个序列,所述多个序列包括所述关键字集合,所述多个序列中的每个序列中的子关键字位于所述子关键字的父关键字之后;利用所述语义学习模型学习所述多个序列。
结合第二方面,在第二方面的一种可能的实现方式中,所述处理模块,还用于将接收到的所述SQL语句中的至少一个自定义关键字替换为至少一个标准关键字,每个自定义关键字对应一个标准关键字,将所述替换后的SQL语句转换为所述AST。
结合第二方面,在第二方面的一种可能的实现方式中,所述处理模块,还用于利用预设算法遍历所述AST,所述预设算法包括深度优先遍历算法或广度优先遍历算法。
结合第二方面,在第二方面的一种可能的实现方式中,所述神经网络模型包括长短期记忆LSTM神经网络模型。
第三方面,本申请提供了一种计算设备,所述计算设备包括处理器和存储器,所述存储器用于存储程序代码,所述处理器用于调用所述存储器中的程序代码执行上述第一方面以及结合上述第一方面中的任意一种实现方式的方法。
第四方面,本申请提供了一种计算机存储介质,所述计算机存储介质存储有计算机程序,当该计算机程序被处理器执行时,可以实现上述第一方面以及结合上述第一方面中的任意一种实现方式所提供的SQL注入检测方法的流程。
第五方面,本申请提供了一种计算机程序产品,该计算机程序产品包括指令,当该计算机程序被计算机执行时,使得计算机可以执行上述第一方面以及结合上述第一方面中的任意一种实现方式所提供的SQL注入检测方法的流程。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种SQL注入检测器部署示意图;
图2是本申请实施例提供的一种SQL注入检测方法的流程示意图;
图3是本申请实施例提供的一种抽象语法树的示意图;
图4是本申请实施例提供的一种关键字替换的示意图;
图5是本申请实施例提供的一种SQL注入检测装置的结构示意图;
图6是本申请实施例提供的一种计算设备的结构示意图。
具体实施方式
下面结合附图对本申请实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
首先,结合附图对本申请中所涉及的部分用语和相关技术进行解释说明,以便于本领域技术人员理解。
结构化查询语言(structured query language,SQL)是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。SQL允许用户在高层数据结构上工作,不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,具有完全不同底层结构的不同数据库系统,可以使用相同的SQL作为数据输入和管理的接口。
SQL注入指的是把恶意SQL命令插入到SQL语句中,并在万维网(world wide web,Web)中的表单提交处、或者输入域名处、或者页面请求处的输入插恶意SQL命令的SQL语句。
词法分析(lexical analysis)是将字符序列转换为单词序列的过程。进行词法分析的程序或者函数叫作词法分析器(lexical analyzer,Lexer),或叫作扫描器(scanner),词法分析器一般以函数的形式存在,供语法分析器调用。在SQL注入检测中,词法分析器可以将SQL语句转换为计算机内部可识别符号(词法符号)。例如,在本申请中,SQL注入检测装置可以对训练集中的或接收到的SQL语句进行词法分析,将SQL语句转换为词法符号。
语法分析(syntactic analysis)是根据某种给定的形式文法对由单词序列(例如英文单词序列)构成的输入文本进行分析并确定其语法结构的一种过程。语法分析器一般作为编译器或解释器的组件出现,其作用是进行语法检查、并构建由输入的单词组成的数据结构(例如抽象语法树等层次化的数据结构)。在SQL注入检测中,语法分析器可以根据语法规则,将词法符号和语法规则符号转换为抽象语法树,其中,树节点之间的连接存在潜在的语义关系和上下文关系。例如,在本申请中,SQL注入检测装置可以对SQL语句进行语法分析,生成抽象语法树。
抽象语法树(abstract syntax tree,AST),或简称语法树,是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言(例如SQL)的语法结构,树上的每个节点都表示源代码中的一种结构。但是,AST中的语法并不会表示出真实语法中出现的每个细节,例如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现,而条件跳转语句可以使用带有两个分支的节点来表示。在本申请中,经过语法分析生成的AST,每个叶子节点表示一个词法符号,每个树节点表示一个语法规则符号,树节点之间的连接存在潜在语义关系和上下文关系。
深度优先遍历算法(depth-first-search)是搜索算法中的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都已被探寻过,搜索将回溯到发现节点v的那条边的起始节点,这个过程将一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。利用深度优先遍历算法遍历AST,可以将AST转换为对应的特征序列。例如,在本申请中,可以利用深度优先遍历算法遍历生成的AST,得到对应的序列。
广度优先遍历算法(breadth-first traverse)也是搜索算法中的一种。与深度优先遍历算法不同,广度优先遍历算法是以层为顺序,将某一层的所有节点都搜索到了之后才向下一层搜索。广度优先遍历从某个顶点出发,首先访问这个顶点,然后找出这个节点的所有未被访问的邻节点,然后再以此邻节点为顶点,继续找它的下一个新的顶点进行访问,重复此步骤,直到所有节点被访问完为止。利用广度优先遍历算法遍历AST,也可以将AST转换为对应的特征序列。例如,在本申请中,可以利用广度优先遍历算法遍历生成的AST,得到对应的序列。
连续词袋(continuous bag of words)是一种神经概率语言模型(neuralprobabilistic languagemodel,NPLM),可以通过中间词来预测窗口中上下文词出现的概率模型。通过CBOW可以对AST转换的特征序列进行词向量学习,得到每个词法符号和语法规则符号对应的向量。
正则表达式(regular expression,RE)又称为规则表达式,通常被用来检索、替换符合某个模式(规则)的文本。正则表达式是对字符串,包括普通字符(例如从a到z之间的字母)和特殊字符(又称为元字符)操作的一种逻辑公式,就是用事先定义好的一些特定字符以及这些特定字符的组合,组成一个规则字符串,这个规则字符串用来表达对字符串的一种过滤逻辑。由于正则表达式具有对字符串的过滤逻辑,所以正则表达式可以用于SQL注入检测。
循环神经网络(recurrent neural network,RNN)是一种节点定向连接成环的人工神经网络,这种网络的内部状态可以展开动态时序行为。RNN不仅考虑前一时刻的输入,而且赋予了网络对前面的内容的一种记忆功能。RNN网络主要由输入层、隐藏层和输出层组成,网络对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。RNN可以用于自然语言处理(natural language processing,NLP)、机器翻译、语音识别、图像描述生成以及文本相似度计算等领域,例如,在本申请中,可以利用RNN对输入的向量进行学习,形成一个神经网络二分类器。
长短期记忆(long short term memory,LSTM)神经网络是RNN进行优化和改进得到的一种神经网络,以解决长期依赖问题。LSTM通过门结构来去除或增加状态信息,用于遗忘的门叫做遗忘门,用于信息增加的门叫做信息增加门,用于输出的门叫做输出门。LSTM通过门结构实现了对重要内容的保留和对不重要内容的去除,通过输出一个0到1之间的概率值来描述每个部分有多少变量可以通过,0表示“不允许任务变量通过”,1表示“允许所有变量通过”。
在Web防火墙和数据库安全防火墙中,需要对SQL注入攻击进行检测,以保护数据库的安全。基于支持向量机(support vector machine,SVM)机器学习可以检测SQL注入。在该方案中,需要先从超文本传输协议(hypertext transfer protocol,HTTP)请求中提取SQL查询语句,然后进行预处理,例如去噪和解码得到请求字符串。之后通过词法分析工具和语法分析工具对请求字符串进行词法分析和语法分析,生成抽象语法树。再进行特征提取,统计HTTP请求的特征,词法分析结果的特征以及抽象语法树的特征,提取的特征可以包括:抽象语法树的高度,子树的高度,节点个数,样本长度,空格、数字、特殊字符占原始查询语句样本的比例和抽象语法树子树个数等,然后组合上述三种类型的特征作为样本的特征向量。使用SVM算法对提取的特征向量进行训练,生成一个SVM二分类器,利用该SVM二分类器对SQL语句进行检测,判定是否存在SQL注入攻击。但是,在上述方案中,仅仅只是考虑了抽象语法树的“样子”和“外观”特征,而在生成的抽象语法树节点中,树节点之间的连接存在潜在语义关系和上下文关系,而上述方案忽略了抽象语法树的语义结构特殊关系,例如抽象语法树的内部逻辑关系,这会导致在后续的检测过程中容易出现漏报和误报,降低准确性。此外,上述方案需要耗费大量人工进行特性分析,从而实现特征提取。
利用长短期记忆(long short term memory,LSTM)神经网络也可以对SQL注入进行检测。在该方案中,需要使用正则表达式对SQL语句中的关键字进行匹配并映射为统一的符号序列,然后将该符号序列转化为向量序列后输入LSTM进行训练,生成一个LSTM二分类器,利用该LSTM二分类器对SQL语句进行检测,判定是否存在SQL注入攻击。但是,在该方案中,是利用的正则表达式生成的符号序列,而不是利用词法分析工具和语法分析工具对SQL语句进行词法分析和语法分析,生成抽象语法树,进而根据抽象语法树进一步生成符号序列,忽略了SQL语句对应的抽象语法树的语义信息。此外,利用正则表达式进行关键字匹配,容易被攻击者绕过,误报漏报率较高。
为了解决上述问题,本申请提供了一种SQL注入检测方法及装置,通过将SQL语句先转换为AST,再遍历AST将其转换为序列,进而转换为向量输入神经网络模型进行检测,可以减少人工分析,提高识别精度,降低误报率。
本申请实施例的技术方案可以应用于Web防火墙或数据库防火墙等场景中,用于检测SQL注入。
在一个具体的实施例中,如图1所示,用户100、服务器200、SQL注入检测器300和数据库400组成一个SQL注入检测系统。在该系统中,服务器200中包含应用程序210,应用程序210接收用户100输入的指令,服务器200将该指令转换为SQL语句并发送给数据库400。SQL注入检测器300中存在已经训练好的神经网络模型,可以对SQL语句进行相应的转换后进行检测,该SQL注入检测器300部署在服务器200和数据库400之间,将服务器200发送给数据库400的SQL语句进行捕获并检测,得到该SQL语句是否含有SQL注入攻击。
本申请实施例涉及SQL注入检测器,SQL注入检测器可以是独立的硬件设备,也可以是部署在硬件设备上的软件设备,例如,SQL注入检测器可以部署在服务器200上,本申请对此不作限定。
基于上述,下面对本申请实施例提供的SQL注入检测方法及装置进行描述。参见图2,图2为本申请实施例提供的一种SQL注入检测方法的流程示意图。如图2所示,该方法包括但不限于以下步骤:
S210:检测装置接收待检测SQL语句。
具体地,待检测SQL语句为字符串。待检测SQL语句通过对携带待检测SQL语句的超文本传输协议(hypertext transport protocol,HTTP)请求进行去噪和解码得到。
组成SQL语句的每个词被称为词法符号。示例性的,待检测SQL语句是“selectuser from db”,select、user、from、db均为词法符号。
S220:检测装置根据待检测SQL语句生成抽象语法树AST。
具体地,检测装置对待检测语句进行词法分析和语法分析,生成AST。
示例性的,待检测SQL语句是“select user from db”,检测装置对其进行词法分析和语法分析之后生成AST,如图3所示。该AST是由词法符号和语法符号组成的,每一个节点为一个关键字,每个节点上的关键字为词法符号或者语法符号。具体地,该AST的叶子节点上的关键字为词法符号,叶子节点为AST中不具有分支的节点,例如,“SELECT”、“USER”、“FROM”和“DB”为AST的叶子节点。
值得说明的是,词法符号和语法符号又可以称为关键字,它们可以混合使用,在后续的描述中,对此不再做特别的区分。此外,在词法符号中,有的是标准词法符号,有的是自定义的词法符号。标准词法符号指由SQL语言定义的词法符号,在本申请实施例中,称标准词法符号为标准关键字,例如“SELECT”和“FROM”是标准词法符号,即标准关键字;自定义的词法符号指由用户自定义的词法符号,在本申请实施例中,称自定义的词法符号为自定义关键字,例如“USER”和“DB”是自定义的词法符号,即自定义关键字。此外,在该AST中,存在具有父子关系的关键字,例如“querySpecification”是“SELECT”、“selectElements”和“fromClause”的父节点,“FROM”和“tableSource”是“fromClause”的子节点等。
上述AST中的词法符号是通过词法分析得到的。具体地,检测装置在接收到待检测SQL语句之后,使用词法分析工具,例如词法分析器,对该待检测SQL语句进行词法分析,提取待检测SQL语句中的词法符号,例如上述图3中的“SELECT”、“USER”、“FROM”和“DB”。
类似的,上述AST中的语法符号是通过语法分析得到的,即检测装置在对待检测SQL语句进行词法分析之后,继续利用语法分析工具,例如语法分析器,对其进行语法分析,分析得到待检测SQL语句中所包含的语法符号,例如上述图3中的“dmlStatement”、“selectElement”、“tableName”等,从而将待检测SQL语句转换为AST。表示一个SQL语句的语法的词被称为语法符号。
在一种可能的实现方式中,检测装置将待检测SQL语句中的至少一个自定义关键字替换为至少一个标准关键字,每个自定义关键字对应一个标准关键字,将替换后的待检测SQL语句转换为AST。
具体地,检测装置在使用词法分析工具提取待检测SQL语句中的词法符号时,针对待检测SQL语句中的每一个词法符号,检测装置会判断该词法符号是否为标准词法符号,例如将该词法符号与标准词法符号库中的词法符号进行一一比对,若检测装置判断出该词法符号不是标准词法符号,则可以确定该词法符号是自定义词法符号,检测装置根据预先定义的替换规则,将该自定义词法符号替换为标准词法符号,该替换规则可以根据需要进行设置,本申请对此不作限定。
示例性的,待检测SQL语句“select user from db”中的“user”和“db”是自定义词法符号,需要将其替换为标准词法符号。“user”对应的标准词法符号可以为“name”,“db”对应的标准词法符号可以为“id”,即替换后的待检测SQL语句为“select name from id”。值得说明的是,“user1”、“user2”、“user3”等自定义词法符号对应的标准词法符号均为“name”,“db1”、“db2”、“db3”等自定义词法符号对应的标准词法符号均为“id”。换句话说,一个标准词法符号可以对应一个或多个自定义词法符号,而一个自定义词法符号,只存在唯一的一个标准词法符号与其对应。
可选的,检测装置可以将待检测SQL语句转换为AST之后,将AST中的至少一个自定义关键字替换为至少一个标准关键字。
示例性的,检测装置对待检测SQL语句“select user from db”进行词法分析和语法分析,生成如上述图3所示的AST。在该AST中,“USER”和“DB”是AST的两个叶子节点,且是自定义关键字,需要对其进行替换,具体替换过程如图4所示。可以看出,自定义关键字“USER”被替换为“NAME”,自定义关键字“DB”被替换为“ID”,“NAME”和“ID”为标准关键字。
可以理解,检测装置通过将自定义关键字替换为标准关键字,可以减少词向量空间大小,进而减小复杂度,提高检测效率。
S230:检测装置确定表示至少两个关键字的至少两个向量。
具体地,神经网络模型并不能识别关键字,只能识别向量,因此检测装置不能直接将转换得到的关键字输入神经网络模型,需要将关键字转换为对应的向量。
在一种可能的实现方式中,检测装置从向量表中查找该至少两个关键字对应的至少两个向量。
具体地,检测装置提前预置了一个向量表,该向量表中存储了关键字和关键字对应的向量。这些关键字可以是根据经验得到的,检测装置在将待检测SQL语句转换为AST之后,针对该AST包括的每个关键字,都可以从该向量表中找到对应的向量,从而可以将待检测SQL语句转换为向量。
在一种可能的实现方式中,检测装置根据所述至少两个关键字查询语义表,确定所述至少两个关键字对应的至少两个向量。
具体地,检测装置获取多条SQL语句,该多条SQL语句可以是提前预置在检测装置中的训练集中的SQL语句。检测装置在获取到多条SQL语句之后,将该多条SQL语句转换为多个AST,该多个AST中的所有关键字组成一个关键字集合,值得说明的是,这个关键字集合包括所述至少两个关键字,即待检测SQL语句生成的AST中的关键字存在于该关键字集合中。检测装置利用语义学习模型,例如CBOW,学习该关键字集合,得到该关键字集合对应的向量集合,并将关键字集合和向量集合记录至语义表中。其中,针对关键字集合中的每一个关键字,在向量集合中存在唯一一个向量与其对应。
进一步的,检测装置在得到语义表之后,可以直接查询语义表,从而可以确定待检测SQL语句生成的AST中的关键字对应的向量。
S240:检测装置将至少两个向量输入神经网络模型,得到待检测SQL语句的检测结果。
具体地,检测装置确定了关键字对应的向量后,将向量输入神经网络模型进行检测,可以得到该待检测SQL语句是正常SQL查询语句还是SQL注入攻击语句。
可选的,该神经网络模型可以是RNN,或者是简单循环神经网络(simplerecurrent network,SRN)、门控循环神经网络(gated recurrent unit networks,GRU)、堆叠循环神经网络(stacked recurrent neural networks,SRNN)等,本申请对具体选用何种神经网络不作具体限定。
或者是,该神经网络模型可以是训练好的神经网络模型,例如神经网络二分类器。即将待检测SQL语句生成的AST中的关键字对应的向量直接输入到该神经网络二分类器就可以输出检测结果,即该待检测SQL语句是正常SQL查询语句还是SQL注入攻击语句。
在一种可能的实现方式中,检测装置在确定表示至少两个关键字的至少两个向量之前,遍历所述AST,将所述AST转换为序列,该序列包括按照顺序排列的至少两个关键字,在该序列中,该至少两个关键字中的父关键字位于所述父关键字的子关键字之前,按照各个向量对应的关键字在该序列中的顺序,将至少两个关键字对应的至少两个向量输入神经网络模型。
具体地,在将AST转换为序列后,该序列不仅包括AST表达的语义信息,即序列包含AST所有的关键字,而且包括AST表达的上下文信息,即序列中关键字之间是按照顺序排列的,该排列顺序表征了AST所表达的上下文信息。
进一步的,序列中关键字的排列顺序是由遍历算法决定的,遍历算法不同,则关键字的排列顺序不同,即最终得到的序列不同。
在一种可能的实现方式中,检测装置利用深度优先遍历算法遍历所述AST,将所述AST转换为序列。示例性的,检测装置利用深度优先遍历算法遍历上述图3所示的AST,得到序列“dmlStatement,selectStatement,querySpecification,SELECT,selectElements,selectElement...,USER,fromClause,FROM,tableSources...,DB”。可以看出,该序列包括AST的所有关键字,而且所有的关键字是按照深度优先遍历算法确定的顺序排列的,该序列展示了AST所表达的语义信息和上下文信息。
或者是,检测装置还可以利用广度优先遍历算法遍历所述AST,将所述AST转换为序列。示例性的,检测装置利用深度优先遍历算法遍历上述图3所示的AST,得到序列“dmlStatement,selectStatement,querySpecification,SELECT,selectElements,fromClause,FROM...,keywordsCanBeld,fullld,USER,uid,simpleld,DB”。应理解,检测装置还可以利用其它的遍历算法遍历得到的AST,从而得到相应的序列,本申请对具体采用何种遍历算法不作具体限定。
可选的,检测装置可以在将AST转换为序列之后,将序列中的至少一个自定义关键字替换为至少一个标准关键字。例如,上述通过深度优先遍历算法得到的序列中,“USER”和“DB”为自定义关键字,将“USER”替换为标准关键字“NAME”,将“DB”替换为标准关键字“ID”,得到替换后的序列“dmlStatement,selectStatement,querySpecification,SELECT,selectElements,selectElement...,NAME,fromClause,FROM,tableSources...,ID”。可以理解,通过将自定义关键字替换为标准关键字,可以有效的减少序列数量,减少词向量空间大小,减小复杂度,提高检测效率。
需要说明的是,上述语义表是检测装置通过对训练集中的SQL语句进行语义学习得到的。下面将详细介绍利用语义学习来得到语义表的步骤和过程。
步骤一:检测装置获取多条SQL语句。
具体地,该多条SQL语句可以是提前预置在检测装置中的训练集中的SQL语句。
特别的,该训练集中包括正常SQL查询语句和SQL注入攻击语句,即检测装置从训练集中获取到的多条SQL语句既包括正常SQL查询语句,也包括SQL注入攻击语句。
步骤二:检测装置将多条SQL语句转换为多个AST。
具体地,检测装置将训练集中的所有SQL语句分别转换为AST,具体的转换过程可以参照上述S220中的相关描述,为了简洁,在此不再赘述。
进一步的,检测装置将多条SQL语句转换为多个AST之后,该多个AST中的所有关键字组成一个关键字集合,这个关键字集合包括待检测SQL语句生成的AST中的关键字。
步骤三:检测装置利用语义学习模型学习关键字集合,得到关键字集合对应的向量集合。
具体地,检测装置可以利用CBOW对关键字集合进行学习,得到每个关键字的向量表示,从而得到关键字集合对应的向量集合。应理解,检测装置也可以利用其它的语义学习模型对关键字集合进行学习,本申请对此不作限定。
应理解,使用CBOW对关键字进行学习是为了学习到每个关键字的上下文语境关系,从而可以使某个关键字能够从它的上下文进行推断得到。特别的,CBOW对相似的关键字进行计算得到的向量也是相似的。例如,序列中的关键字包括水果和苹果,则利用CBOW进行学习得到的向量中,表示水果的向量和表示苹果的向量是相似的。该相似关系可以由该两个向量之间的平方差距离进行表征,也可以由余弦距离进行表征,还可以是由模值距离进行表征,或者是其它距离或特征进行表征。例如,若表示两个关键字的向量的余弦距离越接近于1,即两个向量的夹角越接近0度,则说明这两个向量对应的关键字是相似的,如水果和苹果,当两个向量的夹角等于0度,则这两个向量相等如水果和苹果;同理,若表示两个关键字的向量的余弦距离越远离于1,即两个向量的夹角越大,则说明这两个关键字是不相关的,如苹果和铜。
需要说明的是,输入语义学习模型的关键字可以是有顺序的,也可以是没有顺序的。若需要向语义学习模型输入有顺序的关键字,则检测装置可以在将所有的SQL语句转换为AST之后,针对每一个AST,将其转换为序列。该序列是由关键字按照特定顺序组成的,其特定顺序由遍历算法决定。遍历算法可以是深度优先遍历算法,或者是广度优先遍历算法,本申请对此不作限定。检测装置将AST转换为序列的具体过程可以参照上述S240中的相关描述,为了简洁,在此不再赘述。
此外,检测装置在利用CBOW对关键字集合进行学习时,得到每个关键字的向量表示,不是一次性得到的,而是通过不断的迭代学习,使得表示每个关键字的向量达到一个稳定值,从而将该稳定值作为最终表示该关键字的向量。示例性的,若输入CBOW的关键字是有顺序的,例如将训练集中的每一条SQL语句对应的序列依次输入CBOW,不同SQL语句对应的不同的序列中可能存在相同的关键字,而检测装置需要对训练集中的所有SQL语句转换得到的序列进行学习,因此,检测装置需要经过不断的迭代学习,得到表示每个关键字的向量。进一步的,检测装置在进行CBOW学习之后,针对每一个关键字,可以在向量集合中找到唯一一个向量与之对应。
步骤四:检测装置将关键字集合和向量集合记录至语义表。
具体地,检测装置在利用CBOW学习之后,将所有的关键字以及其对应的向量记录到语义表中,语义表可以是一个矩阵。
值得说明的是,检测装置对训练集中的所有SQL语句进行语义学习得到语义表之后,可以对训练集中的所有SQL语句进行向量表示,即每一条SQL语句都可以转换为对应的向量,可以用一个向量矩阵表示一条SQL语句。检测装置可以将每一条SQL语句对应的向量输入到神经网络中进行训练,得到一个训练好的神经网络模型,形成一个神经网络二分类器,利用该神经网络二分类器,可以实现对待检测SQL语句进行检测。
应理解,若在确定语义表的过程中,输入语义学习模型的是没有顺序的关键字,则利用语义表对训练集中的SQL语句进行向量表示并输入到神经网络中进行训练得到神经网络模型之后,利用该神经网络模型进行检测,若在检测时,将待检测SQL语句对应的向量输入该神经网络模型,即使按照各个向量对应的关键字在序列中的顺序,将各个向量输入该神经网络模型也无法进一步提高精度。
同理,若在确定语义表的过程中,输入语义学习模型的是有顺序的关键字,则利用语义表对训练集中的SQL语句进行向量表示并输入到神经网络中进行训练得到神经网络模型之后,利用该神经网络模型进行检测,若在检测时,将待检测SQL语句对应的向量输入该神经网络模型,按照各个向量对应的关键字在序列中的顺序,将各个向量输入该神经网络模型相较于将各个向量无序的输入到该神经网络模型,可以进一步提高检测精度。
示例性的,待检测SQL语句为“selectuserfromdb”,转换得到的AST如上述图3所示,对自定义关键字进行替换后并采用深度优先遍历算法,得到序列“dmlStatement,selectStatement,querySpecification,SELECT,selectElements,selectElement,…,NAME,fromClause,FROM,tableSources,…,ID”,查询语义表,得到“dmlStatement”的向量表示为{0.1235,0.4912,…,0.1123},“selectStatement”的向量表示为{0.2213,0.3579,…,0.1325},…,“ID”的向量表示为{0.4123,0.2451,...,0.3321}。可以将查询得到的向量按照序列中关键字的顺序形成一个向量矩阵并输入到神经网络二分类器中进行检测,也可以按照序列中关键字的顺序,将每个关键字对应的向量依次输入到神经网络二分类器中进行检测,本申请对此不作限定。
另外,若检测装置检测到SQL注入攻击语句,将会阻断该请求,并向服务器返回一个警告消息。此外,检测装置会将该SQL注入攻击语句与训练集中的SQL语句进行比对,若该SQL注入攻击语句不是训练集中的SQL语句,则将该SQL注入攻击语句添加至训练集中。可以理解,本申请的神经网络二分类器可以识别训练集之外的SQL注入攻击语句,而且在识别后将其加入训练集中,以使检测装置可以利用新的训练集重复上述步骤一至步骤四,以生成新的语义表,进而利用新的语义表对训练集中的SQL语句进行向量表示,以使得神经网络经过训练之后生成新的神经网络二分类器并用于检测SQL语句是否被注入,可以进一步的提高检测准确度,降低误报率。
需要说明的是,若在确定语义表的过程中,输入语义学习模型的是有顺序的关键字,优先选用LSTM循环神经网络进行训练,形成一个神经网络二分类器。容易理解,LSTM循环神经网络中包含门结构,可以选择性的进行训练学习,将一些不重要的信息通过遗忘门进行遗忘,将重要的信息保留并进行训练学习。此外,利用LSTM循环神经网络进行训练学习,还可以避免较长的SQL语句中存在的特征信息在训练学习过程中,因为迭代次数过多而导致丢失。当然,也可以选用其它的神经网络,例如RNN、SRN、GRU等,本申请对此不作限定。
特别的,检测装置在训练完成,得到神经网络二分类器后,可以对测试集中的SQL语句进行检测以检验该神经网络二分类器的检测准确度。该测试集可以是和训练集一起提前输入到检测装置中的,也可以是单独输入到检测装置中的,而且该测试集中同时包括正常SQL查询语句和SQL注入攻击语句。
上述详细阐述了本申请实施例的方法,为了便于更好的实施本申请实施例上述方案,相应地,下面还提供用于配合实施上述方案的相关设备。
参见图5,图5是本申请实施例提供的一种SQL注入检测装置的结构示意图。该检测装置可以是上述图2所述的方法实施例中的检测装置,可以执行图3所述的SQL注入检测方法实施例中以检测装置为执行主体的方法和步骤。如图5所示,所述检测装置500包括接收模块510、处理模块520和神经网络模型530。其中,
接收模块510,用于接收SQL语句;
处理模块520,用于根据接收模块510接收到的SQL语句生成抽象语法树AST,生成的所述AST包括至少两个关键字,每个关键字为所述AST的一个节点;确定表示所述至少两个关键字的至少两个向量,每个关键字由所述至少两个向量中的一个表示;将所述至少两个向量输入所述神经网络模型530,得到所述SQL语句的检测结果。
作为一个实施例,所述至少两个关键字中存在至少一对具有父子关系的关键字,所述处理模块520,还用于遍历所述AST,将所述AST转换为序列,所述序列包括按照顺序排列的所述至少两个关键字,且所述序列中,所述至少两个关键字中的父关键字位于所述父关键字的子关键字之前;按照各个向量对应的关键字在所述序列中的顺序,将所述至少两个向量输入神经网络模型530。
作为一个实施例,所述至少两个关键字中的不同关键字由不同向量表示。
作为一个实施例,所述检测装置500还包括查询模块540,用于根据所述至少两个关键字查询语义表,确定所述至少两个关键字对应的至少两个向量;所述处理模块520,还用于:获取多条SQL语句;将所述多条SQL语句转换为多个AST,所述多个AST包括关键字集合,所述关键字集合包括所述至少两个关键字;利用语义学习模型学习所述关键字集合,得到所述关键字集合对应的向量集合,并将所述关键字集合和所述向量集合记录至所述语义表。
作为一个实施例,所述处理模块520,还用于:遍历所述多个AST,得到多个序列,所述多个序列包括所述关键字集合,所述多个序列中的每个序列中的子关键字位于所述子关键字的父关键字之后;利用所述语义学习模型学习所述多个序列。
作为一个实施例,所述处理模块520,还用于将接收到的所述SQL语句中的至少一个自定义关键字替换为至少一个标准关键字,每个自定义关键字对应一个标准关键字,将所述替换后的SQL语句转换为所述AST。
作为一个实施例,所述处理模块520,还用于利用预设算法遍历所述AST,所述预设算法包括深度优先遍历算法或广度优先遍历算法。
作为一个实施例,所述神经网络模型包括长短期记忆LSTM神经网络模型。
可以理解,本申请实施例中的接收模块510可以由接收器或接收器相关电路组件实现,处理模块520和查询模块540可以由处理器或处理器相关电路组件实现。
需要说明的是,上述SQL注入检测装置的结构以及利用SQL注入检测装置实现SQL注入检测的过程仅仅作为一种示例,不应构成具体限定,可以根据需要对SQL注入检测装置中的各个单元进行增加、减少或合并。此外,SQL注入检测装置中的各个模块的操作和/或功能为了实现上述图2所描述的方法的相应流程,为了简洁,在此不再赘述。
参见图6,图6是本申请实施例提供的一种计算设备的结构示意图。如图6所示,该计算设备600包括:处理器610、通信接口620以及存储器630,所述处理器610、通信接口620以及存储器630通过内部总线640相互连接。应理解,该网络设备可以是数据库服务器。
所述处理器610可以由一个或者多个通用处理器构成,例如中央处理器(centralprocessing unit,CPU),或者CPU和硬件芯片的组合。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC)、可编程逻辑器件(programmablelogic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complexprogrammable logic device,CPLD)、现场可编程逻辑门阵列(field-programmable gatearray,FPGA)、通用阵列逻辑(generic array logic,GAL)或其任意组合。
总线640可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。所述总线640可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但不表示仅有一根总线或一种类型的总线。
存储器630可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM);存储器630也可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM)、快闪存储器(flash memory)、硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);存储器630还可以包括上述种类的组合。存储器630可用于存储程序代码和数据,以便于处理器610调用存储器630中存储的程序代码和数据以实现上述处理模块520、接收模块510的功能。存储器630中的数据包括神经网络模型530。程序代码可以是用来实现图5所示的SQL注入检测装置的功能模块,或者用于实现图2所示的方法实施例中以SQL注入检测装置为执行主体的方法步骤。
此外,上述实施例中的SQL注入检测装置300也可以由多个计算设备600实现。多个计算设备600包括包括多个处理器610和多个存储器630。多个处理器610协同实现如图5中所示的处理模块520、接收模块510和查询模块540;多个存储器630协同实现如图5中所示的神经网络模型530。
本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时,可以实现上述方法实施例中记载的任意一种的部分或全部步骤,以及实现上述图5所描述的任意一个功能模块的功能。
本申请实施例还提供了一种计算机程序产品,当其在计算机或处理器上运行时,使得计算机或处理器执行上述任一个SQL注入检测的方法中的一个或多个步骤。上述所涉及的设备的各组成模块如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在所述计算机可读取存储介质中。
在上述实施例中,对各个实施例的描述各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
应理解,本文中涉及的第一、第二、等各种数字编号仅为描述方便进行的区分,并不用来限制本申请的范围。
应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
还应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本申请实施例装置中的模块可以根据实际需要进行合并、划分和删减。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (17)
1.一种结构化查询语言SQL注入检测方法,其特征在于,包括:
接收SQL语句;
根据接收到的所述SQL语句生成抽象语法树AST,生成的所述AST包括至少两个关键字,每个关键字为所述AST的一个节点;
确定表示所述至少两个关键字的至少两个向量,每个关键字由所述至少两个向量中的一个表示;
将所述至少两个向量输入神经网络模型,得到所述SQL语句的检测结果。
2.如权利要求1所述的方法,其特征在于:
所述至少两个关键字中存在至少一对具有父子关系的关键字,确定表示所述至少两个关键字的至少两个向量之前,所述方法还包括:
遍历所述AST,将所述AST转换为序列,所述序列包括按照顺序排列的所述至少两个关键字,且所述序列中,所述至少两个关键字中的父关键字位于所述父关键字的子关键字之前;
将所述至少两个向量输入神经网络模型,包括:按照各个向量对应的关键字在所述序列中的顺序,将所述至少两个向量输入神经网络模型。
3.如权利要求1-2中任一所述的方法,其特征在于,所述至少两个关键字中的不同关键字由不同向量表示。
4.如权利要求1-3任一所述的方法,其特征在于,所述确定表示所述至少两个关键字的至少两个向量,包括:
根据所述至少两个关键字查询语义表,确定所述至少两个关键字对应的至少两个向量;
所述语义表的确定方法包括:
获取多条SQL语句;
将所述多条SQL语句转换为多个AST,所述多个AST包括关键字集合,所述关键字集合包括所述至少两个关键字;
利用语义学习模型学习所述关键字集合,得到所述关键字集合对应的向量集合,并将所述关键字集合和所述向量集合记录至所述语义表。
5.如权利要求4所述的方法,其特征在于,所述利用语义学习模型学习所述关键字集合,包括:
遍历所述多个AST,得到多个序列,所述多个序列包括所述关键字集合,所述多个序列中的每个序列中的子关键字位于所述子关键字的父关键字之后;
利用语义学习模型学习所述多个序列。
6.如权利要求1-5任一所述的方法,其特征在于,根据接收到的所述SQL语句生成抽象语法树AST,包括下述一种方式:
将接收到的所述SQL语句中的至少一个自定义关键字替换为至少一个标准关键字,每个自定义关键字对应一个标准关键字,将所述替换后的SQL语句转换为所述AST。
7.如权利要求1-6任一所述的方法,其特征在于,遍历所述AST包括:
利用预设算法遍历所述AST,所述预设算法包括深度优先遍历算法或广度优先遍历算法。
8.如权利要求1-7任一所述的方法,其特征在于,所述神经网络模型包括长短期记忆LSTM神经网络模型。
9.一种SQL注入检测装置,其特征在于,所述SQL注入检测装置包括接收模块、处理模块和神经网络模型,
所述接收模块,用于接收SQL语句;
所述处理模块,用于:
根据接收到的所述SQL语句生成抽象语法树AST,生成的所述AST包括至少两个关键字,每个关键字为所述AST的一个节点;
确定表示所述至少两个关键字的至少两个向量,每个关键字由所述至少两个向量中的一个表示;
将所述至少两个向量输入所述神经网络模型,得到所述SQL语句的检测结果。
10.如权利要求9所述的检测装置,其特征在于,所述至少两个关键字中存在至少一对具有父子关系的关键字,
所述处理模块,还用于遍历所述AST,将所述AST转换为序列,所述序列包括按照顺序排列的所述至少两个关键字,且所述序列中,所述至少两个关键字中的父关键字位于所述父关键字的子关键字之前;
所述处理模块,还用于按照各个向量对应的关键字在所述序列中的顺序,将所述至少两个向量输入神经网络模型。
11.如权利要求9或10所述的检测装置,其特征在于,所述至少两个关键字中的不同关键字由不同向量表示。
12.如权利要求9-11任一项所述的检测装置,其特征在于,
所述检测装置还包括查询模块,用于根据所述至少两个关键字查询语义表,确定所述至少两个关键字对应的至少两个向量;
所述处理模块,还用于:
获取多条SQL语句;
将所述多条SQL语句转换为多个AST,所述多个AST包括关键字集合,所述关键字集合包括所述至少两个关键字;
利用语义学习模型学习所述关键字集合,得到所述关键字集合对应的向量集合,并将所述关键字集合和所述向量集合记录至所述语义表。
13.如权利要求12所述的检测装置,其特征在于,
所述处理模块,还用于:
遍历所述多个AST,得到多个序列,所述多个序列包括所述关键字集合,所述多个序列中的每个序列中的子关键字位于所述子关键字的父关键字之后;
利用所述语义学习模型学习所述多个序列。
14.如权利要求9-13任一项所述的检测装置,其特征在于,
所述处理模块,还用于将接收到的所述SQL语句中的至少一个自定义关键字替换为至少一个标准关键字,每个自定义关键字对应一个标准关键字,将所述替换后的SQL语句转换为所述AST。
15.如权利要求9-14任一项所述的检测装置,其特征在于,
所述处理模块,还用于利用预设算法遍历所述AST,所述预设算法包括深度优先遍历算法或广度优先遍历算法。
16.如权利要求9-15所述的检测装置,其特征在于,所述神经网络模型包括长短期记忆LSTM神经网络模型。
17.一种计算设备,其特征在于,所述计算设备包括存储器和处理器,所述处理器执行所述存储器存储的计算机指令,使得所述计算设备执行权利要求1至8任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910588074.4A CN110362597A (zh) | 2019-06-28 | 2019-06-28 | 一种结构化查询语言sql注入检测方法及装置 |
PCT/CN2020/094797 WO2020259260A1 (zh) | 2019-06-28 | 2020-06-07 | 一种结构化查询语言sql注入检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910588074.4A CN110362597A (zh) | 2019-06-28 | 2019-06-28 | 一种结构化查询语言sql注入检测方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110362597A true CN110362597A (zh) | 2019-10-22 |
Family
ID=68217665
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910588074.4A Pending CN110362597A (zh) | 2019-06-28 | 2019-06-28 | 一种结构化查询语言sql注入检测方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110362597A (zh) |
WO (1) | WO2020259260A1 (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110955433A (zh) * | 2019-11-27 | 2020-04-03 | 中国银行股份有限公司 | 一种自动化部署脚本的生成方法及装置 |
CN111399843A (zh) * | 2020-03-11 | 2020-07-10 | 中国邮政储蓄银行股份有限公司 | 将sql运行信息映射到sql文件的方法、系统及电子设备 |
CN111400338A (zh) * | 2020-03-04 | 2020-07-10 | 平安医疗健康管理股份有限公司 | Sql优化方法、装置、存储介质及计算机设备 |
CN111881028A (zh) * | 2020-07-23 | 2020-11-03 | 深圳慕智科技有限公司 | 一种基于模型代码语法分析的神经网络自动生成方法 |
CN112035099A (zh) * | 2020-09-01 | 2020-12-04 | 北京天融信网络安全技术有限公司 | 一种抽象语法树中节点的向量化表示方法及装置 |
CN112069498A (zh) * | 2020-09-21 | 2020-12-11 | 全球能源互联网研究院有限公司 | 一种sql注入检测模型构建方法及检测方法 |
CN112100617A (zh) * | 2020-09-15 | 2020-12-18 | 全球能源互联网研究院有限公司 | 一种异常sql检测方法及装置 |
WO2020259260A1 (zh) * | 2019-06-28 | 2020-12-30 | 华为技术有限公司 | 一种结构化查询语言sql注入检测方法及装置 |
CN112202822A (zh) * | 2020-12-07 | 2021-01-08 | 中国人民解放军国防科技大学 | 数据库注入检测方法、装置、电子设备及存储介质 |
CN112966507A (zh) * | 2021-03-29 | 2021-06-15 | 北京金山云网络技术有限公司 | 构建识别模型及攻击识别方法、装置、设备及存储介质 |
CN113489677A (zh) * | 2021-05-27 | 2021-10-08 | 贵州电网有限责任公司 | 一种基于语义上下文的零规则攻击检测方法及装置 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115361176B (zh) * | 2022-08-03 | 2024-03-01 | 昆明理工大学 | 一种基于FlexUDA模型的SQL注入攻击检测方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8225402B1 (en) * | 2008-04-09 | 2012-07-17 | Amir Averbuch | Anomaly-based detection of SQL injection attacks |
CN107168952A (zh) * | 2017-05-15 | 2017-09-15 | 北京百度网讯科技有限公司 | 基于人工智能的信息生成方法和装置 |
CN107516041A (zh) * | 2017-08-17 | 2017-12-26 | 北京安普诺信息技术有限公司 | 基于深度神经网络的WebShell检测方法及其系统 |
CN107797992A (zh) * | 2017-11-10 | 2018-03-13 | 北京百分点信息科技有限公司 | 命名实体识别方法及装置 |
CN107885999A (zh) * | 2017-11-08 | 2018-04-06 | 华中科技大学 | 一种基于深度学习的漏洞检测方法及系统 |
CN108712448A (zh) * | 2018-07-09 | 2018-10-26 | 四川大学 | 一种基于动态污点分析的注入式攻击检测模型 |
CN109873800A (zh) * | 2018-12-11 | 2019-06-11 | 四川大学 | 基于词向量和lstm检测sql注入行为 |
CN109918500A (zh) * | 2019-01-17 | 2019-06-21 | 平安科技(深圳)有限公司 | 基于卷积神经网络的文本分类方法及相关设备 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190042743A1 (en) * | 2017-12-15 | 2019-02-07 | Intel Corporation | Malware detection and classification using artificial neural network |
CN108985061B (zh) * | 2018-07-05 | 2021-10-01 | 北京大学 | 一种基于模型融合的webshell检测方法 |
CN110362597A (zh) * | 2019-06-28 | 2019-10-22 | 华为技术有限公司 | 一种结构化查询语言sql注入检测方法及装置 |
-
2019
- 2019-06-28 CN CN201910588074.4A patent/CN110362597A/zh active Pending
-
2020
- 2020-06-07 WO PCT/CN2020/094797 patent/WO2020259260A1/zh active Application Filing
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8225402B1 (en) * | 2008-04-09 | 2012-07-17 | Amir Averbuch | Anomaly-based detection of SQL injection attacks |
CN107168952A (zh) * | 2017-05-15 | 2017-09-15 | 北京百度网讯科技有限公司 | 基于人工智能的信息生成方法和装置 |
CN107516041A (zh) * | 2017-08-17 | 2017-12-26 | 北京安普诺信息技术有限公司 | 基于深度神经网络的WebShell检测方法及其系统 |
CN107885999A (zh) * | 2017-11-08 | 2018-04-06 | 华中科技大学 | 一种基于深度学习的漏洞检测方法及系统 |
CN107797992A (zh) * | 2017-11-10 | 2018-03-13 | 北京百分点信息科技有限公司 | 命名实体识别方法及装置 |
CN108712448A (zh) * | 2018-07-09 | 2018-10-26 | 四川大学 | 一种基于动态污点分析的注入式攻击检测模型 |
CN109873800A (zh) * | 2018-12-11 | 2019-06-11 | 四川大学 | 基于词向量和lstm检测sql注入行为 |
CN109918500A (zh) * | 2019-01-17 | 2019-06-21 | 平安科技(深圳)有限公司 | 基于卷积神经网络的文本分类方法及相关设备 |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020259260A1 (zh) * | 2019-06-28 | 2020-12-30 | 华为技术有限公司 | 一种结构化查询语言sql注入检测方法及装置 |
CN110955433A (zh) * | 2019-11-27 | 2020-04-03 | 中国银行股份有限公司 | 一种自动化部署脚本的生成方法及装置 |
CN110955433B (zh) * | 2019-11-27 | 2023-08-29 | 中国银行股份有限公司 | 一种自动化部署脚本的生成方法及装置 |
CN111400338B (zh) * | 2020-03-04 | 2022-11-22 | 深圳平安医疗健康科技服务有限公司 | Sql优化方法、装置、存储介质及计算机设备 |
CN111400338A (zh) * | 2020-03-04 | 2020-07-10 | 平安医疗健康管理股份有限公司 | Sql优化方法、装置、存储介质及计算机设备 |
CN111399843A (zh) * | 2020-03-11 | 2020-07-10 | 中国邮政储蓄银行股份有限公司 | 将sql运行信息映射到sql文件的方法、系统及电子设备 |
CN111399843B (zh) * | 2020-03-11 | 2023-08-01 | 中国邮政储蓄银行股份有限公司 | 将sql运行信息映射到sql文件的方法、系统及电子设备 |
CN111881028A (zh) * | 2020-07-23 | 2020-11-03 | 深圳慕智科技有限公司 | 一种基于模型代码语法分析的神经网络自动生成方法 |
CN112035099A (zh) * | 2020-09-01 | 2020-12-04 | 北京天融信网络安全技术有限公司 | 一种抽象语法树中节点的向量化表示方法及装置 |
CN112035099B (zh) * | 2020-09-01 | 2024-03-15 | 北京天融信网络安全技术有限公司 | 一种抽象语法树中节点的向量化表示方法及装置 |
CN112100617A (zh) * | 2020-09-15 | 2020-12-18 | 全球能源互联网研究院有限公司 | 一种异常sql检测方法及装置 |
CN112100617B (zh) * | 2020-09-15 | 2023-11-24 | 全球能源互联网研究院有限公司 | 一种异常sql检测方法及装置 |
CN112069498A (zh) * | 2020-09-21 | 2020-12-11 | 全球能源互联网研究院有限公司 | 一种sql注入检测模型构建方法及检测方法 |
CN112069498B (zh) * | 2020-09-21 | 2023-11-21 | 全球能源互联网研究院有限公司 | 一种sql注入检测模型构建方法及检测方法 |
CN112202822A (zh) * | 2020-12-07 | 2021-01-08 | 中国人民解放军国防科技大学 | 数据库注入检测方法、装置、电子设备及存储介质 |
CN112966507A (zh) * | 2021-03-29 | 2021-06-15 | 北京金山云网络技术有限公司 | 构建识别模型及攻击识别方法、装置、设备及存储介质 |
CN113489677A (zh) * | 2021-05-27 | 2021-10-08 | 贵州电网有限责任公司 | 一种基于语义上下文的零规则攻击检测方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2020259260A1 (zh) | 2020-12-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110362597A (zh) | 一种结构化查询语言sql注入检测方法及装置 | |
CN109697162B (zh) | 一种基于开源代码库的软件缺陷自动检测方法 | |
US9881053B2 (en) | Machine-assisted object matching | |
Henriksen et al. | Mona: Monadic second-order logic in practice | |
US20160224637A1 (en) | Processing associations in knowledge graphs | |
US9600570B2 (en) | Method and system for text filtering | |
CN107292170B (zh) | Sql注入攻击的检测方法及装置、系统 | |
CN109522465A (zh) | 基于知识图谱的语义搜索方法及装置 | |
Fan et al. | Querying big graphs within bounded resources | |
WO2008002638A1 (en) | Visual and multi-dimensional search | |
CN107844533A (zh) | 一种智能问答系统及分析方法 | |
CN102279875A (zh) | 钓鱼网站的识别方法和装置 | |
Pereira Nunes et al. | Complex matching of rdf datatype properties | |
Henzinger et al. | Faster algorithms for the nonemptiness of Streett automata and for communication protocol pruning | |
Ge et al. | AMDroid: android malware detection using function call graphs | |
JP2022073981A (ja) | ソースコード取得 | |
Ibba et al. | Evaluating machine-learning techniques for detecting smart ponzi schemes | |
Janet et al. | Anti-phishing System using LSTM and CNN | |
CN111368529B (zh) | 基于边缘计算的移动终端敏感词识别方法、装置及系统 | |
CN103324886A (zh) | 一种网络攻击检测中指纹库的提取方法和系统 | |
Nikolov et al. | Uncovering semantic bias in neural network models using a knowledge graph | |
Qi et al. | FROG: Inference from knowledge base for missing value imputation | |
Assefa et al. | Intelligent phishing website detection using deep learning | |
CN104424399B (zh) | 一种基于病毒蛋白质本体的知识导航的方法、装置 | |
US11777987B2 (en) | Method and system for layered detection of phishing websites |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220208 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Applicant after: Huawei Cloud Computing Technology Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20191022 |