CN104123497A - 一种防御sql注入的方法、装置及系统 - Google Patents

一种防御sql注入的方法、装置及系统 Download PDF

Info

Publication number
CN104123497A
CN104123497A CN201410318865.2A CN201410318865A CN104123497A CN 104123497 A CN104123497 A CN 104123497A CN 201410318865 A CN201410318865 A CN 201410318865A CN 104123497 A CN104123497 A CN 104123497A
Authority
CN
China
Prior art keywords
sql
sql statement
template
statement
inject
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
Application number
CN201410318865.2A
Other languages
English (en)
Inventor
张云海
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NSFOCUS Information Technology Co Ltd
Beijing NSFocus Information Security Technology Co Ltd
Original Assignee
NSFOCUS Information Technology Co Ltd
Beijing NSFocus Information Security Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by NSFOCUS Information Technology Co Ltd, Beijing NSFocus Information Security Technology Co Ltd filed Critical NSFOCUS Information Technology Co Ltd
Priority to CN201410318865.2A priority Critical patent/CN104123497A/zh
Publication of CN104123497A publication Critical patent/CN104123497A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及计算机技术领域,公开了一种防御SQL注入的方法、装置及系统。所述方法包括:在向数据库服务器发送结构化查询语言SQL语句之前,将语义信息嵌入到所述SQL语句中,生成包含所述SQL语句和所述语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;向数据库服务器发送所述提交数据。通过本发明提供的方法能够有效避免攻击者通过SQL注入获得服务器中的敏感数据,对应用程序造成攻击,从而实现无误报和无漏报。

Description

一种防御SQL注入的方法、装置及系统
技术领域
本发明涉及计算机技术领域,尤其涉及一种防御SQL注入的方法、装置及系统。
背景技术
随着B/S(浏览器/服务器)模式应用开发的发展,使用这种模式编写应用程序的程序员越来越多,但是,由于大部分程序员在编写代码的时候,没有对客户端侧用户输入数据的合法性进行检测,使得应用程序存在一定的安全隐患,导致应用程序存在结构化查询语言(SQL,Structured Query Language)注入风险。
SQL是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;而SQL注入通过把SQL命令插入到Web表单中,或把SQL命令输入域名中或把SQL命令插入到页面请求的查询字符串中,最终达到欺骗服务器来执行恶意的SQL命令。攻击者通过SQL注入,对应用程序造成攻击,从而获得敏感信息,并且在一些情况下,还有可能导致服务器权限的丢失。因此,对于数据库系统来说,防御SQL注入相当重要,而网站管理人员对SQL注入的防御也极其重视。目前,相关技术中常见的SQL注入防御技术主要包括以下三种:
l)模式匹配
用正则表达式描述SQL注入攻击的特征,形成攻击特征规则。将用户提交的数据与攻击特征进行匹配,若两者相符则认为存在SQL注入攻击。
2)机器学习
由学习阶段与检测阶段两个部分组成。在学习阶段,采用统计分析、数据挖掘等方法,学习正常流量的数据特征,建立合法SQL语句的知识库。在检测阶段,对接收到的流量在学习到的正常流量模型的指导下进行分类,采用“非正常即异常”的方式检测攻击。
3)语法分析
提取HTTP请求中的各种参数,对其进行SQL语法分析,若存在合法的SQL语句片段,则认为存在SQL注入攻击。
然而,上述方法1)因为可以用于SQL注入攻击的形式非常多,很难用一组由攻击特征规则来描述所有可能的攻击形式,又不会命中正常的SQL语句,因而存在高误报、高漏报的问题。上述方法2)存在过学习和欠学习的问题,过学习通常意味着攻击流量混入了正常流量中被错误地学习,从而导致攻击的特征被带入到最终的正常流量模型,此时在检测时会带来漏报的问题;欠学习通常意味着学习流量并没有包含所有的正常流量模式,导致部分正常流量的模型没有被学习到,在检测过程中会导致误报的问题。上述方法3)不能处理HTTPS请求中的注入;不能处理对参数进行了编码的应用(需要针对具体应用修改实现),因而该方法的应用场景有限;另外,该方法对于复杂的SQL注入攻击,还是有一定的误报与漏报。由此可见,相关技术中存在误报和漏报的问题。
发明内容
本发明的目的是提供一种防御SQL注入的方法、装置及系统,以克服相关技术中存在误报和漏报的问题。
本发明提供一种防御SQL注入的方法,用于Web客户端,包括:
在向数据库服务器发送结构化查询语言SQL语句之前,将语义信息嵌入到所述SQL语句中,生成包含所述SQL语句和所述语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;
向数据库服务器发送所述提交数据。
本发明还提供一种防御SQL注入的方法,用于中间件,所述方法包括:
接收Web客户端发送来的包含SQL语句和语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;
根据起始符号和结束符号提取所述提交数据中的SQL模板和SQL语句;
比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置;
当比对结果为相同时,确定所述SQL语句中不存在SQL注入;
当比对结果为不相同时,确定所述SQL语句中存在SQL注入。
本发明还提供一种防御SQL注入的方法,用于数据库服务器,所述方法包括:
接收Web客户端发送来的包含SQL语句和语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;
根据起始符号和结束符号提取所述提交数据中的SQL模板和SQL语句;
比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置;
当比对结果为相同时,确定所述SQL语句中不存在SQL注入;
当比对结果为不相同时,确定所述SQL语句中存在SQL注入。
本发明还提供一种防御SQL注入的装置,用于Web客户端,所述装置包括:
语义信息嵌入模块,用于在向数据库服务器发送结构化查询语言SQL语句之前,将语义信息嵌入到所述SQL语句中,生成包含所述SQL语句和所述语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;
发送模块,用于向数据库服务器发送所述提交数据。
本发明还提供一种防御SQL注入的装置,用于中间件,所述装置包括:
接收模块,用于接收Web客户端发送来的包含SQL语句和语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;
提取模块,用于根据起始符号和结束符号提取所述提交数据中的SQL模板和SQL语句;
比对模块,用于比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置;
第一确定模块,用于当比对结果为相同时,确定所述SQL语句中不存在SQL注入;
第二确定模块,用于当比对结果为不相同时,确定所述SQL语句中存在SQL注入。
本发明还提供一种防御SQL注入的装置,用于数据库服务器,所述装置包括:
接收模块,用于接收Web客户端发送来的包含SQL语句和语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;
提取模块,用于根据起始符号和结束符号提取所述提交数据中的SQL模板和SQL语句;
比对模块,用于比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置;
第一确定模块,用于当比对结果为相同时,确定所述SQL语句中不存在SQL注入;
第二确定模块,用于当比对结果为不相同时,确定所述SQL语句中存在SQL注入。
本发明还提供一种防御SQL注入的系统,所述系统包括:
Web客户端,用于在向数据库服务器发送结构化查询语言SQL语句之前,将语义信息嵌入到所述SQL语句中,生成包含所述SQL语句和所述语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;并向数据库服务器发送所述提交数据;
服务器,用于接收Web客户端发送来的包含所述SQL语句和所述语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;根据起始符号和结束符号提取所述提交数据中的SQL模板和SQL语句;比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置;当比对结果为相同时,确定所述SQL语句中不存在SQL注入;当比对结果为不相同时,确定所述SQL语句中存在SQL注入;当确定所述SQL语句中不存在SQL注入时,执行所述SQL语句。
本发明至少具有以下有益效果:通过由Web客户端将语义信息嵌入到SQL语句中生成包含SQL语句和语义信息的提交数据,然后交由中间件或数据库服务器根据提交数据中的语义信息对提交数据中的SQL语句进行检验。当SQL语句相对语义信息的语义发生变化时,确定该SQL语句中存在SQL注入。因为SQL语句都预先进行了语义信息的嵌入,使得在检测时有正确的语义作为参考,能够有效避免攻击者通过SQL注入获得服务器中的敏感数据,对应用程序造成攻击,能够实现无误报和无漏报。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
图1为本发明实施例中用于Web客户端的防御SQL注入的方法的示例性流程图;
图2为本发明实施例中用于中间件的防御SQL注入的方法的示例性流程图;
图3为本发明实施例中用于数据库服务器的防御SQL注入的方法的示例性流程图;
图4为本发明实施例中Web客户端和数据库服务完成防御SQL注入的的示例性流程图;
图5为本发明实施例中以对不存在SQL注入的用户登录SQL语句进行SQL检测的示例性流程图;
图6为本发明实施例中用户登录SQL模板的语法树的示意图;
图7为本发明实施例中不存在SQL注入的用户登录SQL语句的语法树的示意图;
图8为本发明实施例中以对存在SQL注入的用户登录SQL语句进行SQL检测的示例性流程图;
图9为本发明实施例中存在SQL注入的用户登录SQL语句的语法树的示意图;
图10为本发明实施例中用于Web客户端的防御SQL注入的装置的示意图;
图11为本发明实施例中用于中间件的防御SQL注入的装置的示意图;
图12为本发明实施例中用于中间件的防御SQL注入的装置的另一示意图;
图13为本发明实施例中用于数据库服务器的防御SQL注入的装置的示意图;
图14为本发明实施例中用于数据库服务器的防御SQL注入的装置的另一示意图;
图15为本发明实施例中防御SQL注入的系统的示意图。
具体实施方式
以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
本发明实施例提供一种防御SQL注入的的方法,在该方法中通过由Web客户端将语义信息嵌入到SQL语句中,从而生成包含语义信息和SQL语句的提交数据,然后交由中间件或数据库服务器根据该提交数据中的语义信息对SQL语句进行检验。当SQL语句相对语义信息的语义发生变化时,确定该SQL语句中存在SQL注入。因为SQL语句都预先进行了语义信息的嵌入,使得在检测时有正确的语义作为参考,能够有效避免攻击者通过SQL注入获得服务器中的敏感数据,对应用程序造成攻击,能够实现无误报和无漏报。下面对本发明实施例中防御SQL注入的方法进行详细说明。
如图1所示,为本发明实施例中防御SQL注入的方法的示例性流程图,用于Web客户端,该方法包括步骤101-步骤102:
步骤101:在向数据库服务器发送结构化查询语言SQL语句之前,将语义信息嵌入到所述SQL语句中,生成包含所述SQL语句和所述语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号。
其中,在一个实施例中,提交数据中包含的信息依次为起始符号、SQL模板、结束符号、SQL语句。
其中,在一个实施例中,所述SQL模板为,将Web客户端生成SQL语句的源代码片段中用户输入的内容用预设的变量符号代替后,生成的SQL语句。例如,Web客户端生成SQL语句的源代码片段为:
"SELECT*FROM users WHERE user='"+name+"’AND passwd='"+pass+"'"
则将用户输入的部分用预设变量符号代替后构建的SQL模板为:
SELECT*FROM users WHERE name=$AND passwd=$
其中,SELECT*FROM users WHERE为不变量;$表示预设的变量符号;name和passwd为变量参数。
需要说明的是,任何能够表征SQL语句的语法结构和变量,并能形成语法树的SQL模板均适用于本发明实施例,在此不做赘述。
通过构建SQL模板为SQL注入的检测提供一个参考标准,从而保证SQL注入检测的准确性,实现无漏报和无误报,从而有效地防御SQL注入的效率。
其中,在一个实施例中,所述SQL模板已预先按照所述Web客户端的源代码编写规范嵌入至相应的源代码片段中,以使所述Web客户端在生成所述SQL语句时能够嵌入相应的SQL模板。具体的,可以先虚拟执行并分析Web客户端的源代码,定位其中生成SQL语句的代码片段,然后用预设的变量符号为代码片段中用户输入的变量赋值并执行该代码片段,从而得到SQL模板,然后将SQL模板根据Web客户端的源代码的编写规范加入到相应的源代码片段,实现SQL模板的回注,以保证Web客户端在之后执行生成SQL语句的源代码时,能够将语义信息嵌入至SQL语句中。通过按照Web客户端的源代码编写规范嵌入至相应的源代码片段中,使Web客户端在生成SQL语句时能够嵌入语义信息,从而使Web客户端具有嵌入语义信息的功能。
步骤102:向数据库服务器发送所述提交数据。
本发明实施例实现通过Web客户端将语义信息嵌入SQL语句中,使得在检测时有正确的语义作为参考,以便于实现对SQL注入的检测,从而能够有效避免攻击者通过SQL注入获得服务器中的敏感数据,对应用程序造成攻击,从而实现无误报和无漏报,有效地防御SQL注入。
如图2所示,为本发明实施例中防御SQL注入的方法的示例性流程图,用于中间件,该方法包括步骤201-步骤205:
步骤201:接收Web客户端发送来的包含SQL语句和语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号。
步骤202:根据起始符号和结束符号提取所述提交数据中的SQL模板和SQL语句。
步骤203:比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置。
其中,在一个实施例中,步骤203可执行为:比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的字符串是否相同;当比对结果为相同时,确定确定所述SQL语句中不存在SQL注入;当比对结果为不相同时,确定所述SQL语句中存在SQL注入。例如,可以通过孩子-兄弟表示法将两个语法树转为等价的二叉树形式,通过字符串比较算法对两个二叉树进行比对。例如,可以预先对语法树中的各节点所处的位置自上而下,由左至右进行编号,当处于相同编号位置的节点的字符串相同时,则确定两语法树中该编号位置的节点相同,否则确定该编号位置的节点不同,若不同的节点不是预设变量符号代替的部分,则认为两棵语法树不同。
其中,在一个实施例中,步骤203可执行为:比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的哈希值是否相同。其中,当比对结果为相同时,确定确定所述SQL语句中不存在SQL注入;当比对结果为不相同时,确定所述SQL语句中存在SQL注入。
步骤204:当比对结果为相同时,确定所述SQL语句中不存在SQL注入。
步骤205:当比对结果为不相同时,确定所述SQL语句中存在SQL注入。
其中,在一个实施例中,当确定所述SQL语句中不存在SQL注入时,将所述SQL语句提交至数据库服务器执行;当确定所述SQL语句中存在SQL注入时,触发告警操作;并丢弃所述提交数据。这样,能够有效避免攻击者通过SQL注入获得服务器中的敏感数据,对应用程序造成攻击。
本发明实施例实现通过中间件对SQL模板和SQL语句进行比对,实现对SQL注入的检测,从而能够有效避免攻击者通过SQL注入获得服务器中的敏感数据,对应用程序造成攻击,进而实现有效的防御SQL注入。
需要说明的是,上述的中间件可以作为一个独立的实体在Web客户端和服务器之间工作,也可以位于服务器中。
如图3所示,为本发明实施例中防御SQL注入的方法的示例性流程图,用于数据库服务器,该方法包括步骤301-步骤305:
步骤301:接收Web客户端发送来的包含SQL语句和语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号。
步骤302:根据起始符号和结束符号提取所述提交数据中的SQL模板和SQL语句。
步骤303:比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置。
其中,在一个实施例中,步骤303可执行为:比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的字符串是否相同;或比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的哈希值是否相同。
步骤304:当比对结果为相同时,确定所述SQL语句中不存在SQL注入。
步骤305:当比对结果为不相同时,确定所述SQL语句中存在SQL注入。
其中,在一个实施例中,当确定所述SQL语句中不存在SQL注入时,执行所述SQL语句;当确定所述SQL语句中存在SQL注入时,触发告警操作;并丢弃所述提交数据。这样,能够有效避免攻击者通过SQL注入获得服务器中的敏感数据,对应用程序造成攻击。
本发明实施例实现通过数据库服务器对SQL模板和SQL语句进行比对,实现对SQL注入的检测,从而能够有效避免攻击者通过SQL注入获得服务器中的敏感数据,对应用程序造成攻击,进而实现有效的防御SQL注入。
下面通过几个简单的实施例对本发明实施例中防御SQL注入的的方法进行详细说明。
实施例一
如图4所示,以客户端Web客户端将语义信息嵌入到SQL语句中,由数据库服务器完成对SQL注入的检测为例,对本发明实施例中防御SQL注入的的方法进行详细说明,该方法包括步骤401-步骤411:
步骤401:Web客户端在发送SQL语句之前,将语义信息嵌入到所述SQL语句中,生成包含SQL语句和语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的起始符号和结束符号。
步骤402:Web客户端向数据库服务器发送所述提交数据。
步骤403:数据库服务器接收Web客户端发送来的提交数据。
步骤404:数据库服务器判断提交数据中是否包括起始符号,若是,则执行步骤405,若否,则执行步骤410。
步骤405:数据库服务器判断提交数据中是否包括结束符号,若是,则执行步骤406,若否,则执行步骤409。
步骤406:数据库服务器提取所述提交数据中的SQL模板和SQL语句。
步骤407:数据库服务器比对SQL模板的语法树与SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置,若是,则执行步骤408,若否,则执行步骤409。
步骤408:数据库服务器执行SQL语句。
步骤409:数据库服务器触发告警操作,并丢弃所述提交数据。
步骤410:数据库服务器判断提交数据中是否存在变量,若是,则执行步骤411,若否,则执行步骤408。
步骤411:数据库服务器对提交数据进行例外管理。
其中,例如管理例如是可以预先存储有可以执行的提交数据的例外管理分类信息,该例外管理分类信息中可以存储有可以执行的SQL语句的特征。当提交数据包含在例外管理的分类信息中时,确认提交数据不存在SQL注入,并执行SQL语句;当提交数据不包含在例外管理分类信息中时,形成例外管理通知并显示,由数据库服务器管理员决定是执行提交数据还是放弃提交数据。
本发明实施例在通过向SQL语句中嵌入语义信息并根据该语义信息对SQL语句进行检测,以实现对SQL注入的检测,能够有效避免攻击者通过SQL注入获得服务器中的敏感数据,对应用程序造成攻击,实现无漏报、无误报。
实施例二
如图5所示,以检测不包括SQL注入的用户登录语句为例,对本发明实施例中防御SQL注入的的方法进行详细说明,该方法包括步骤501-步骤508:
步骤501:Web客户端接收用户输入的数据,其中,用户名name为admin,密码password为123456。
其中,Web客户端生成SQL语句的源代码片段:
"SELECT*FROM users WHERE user='"+name+"'AND passwd='"+pass+"'"
与该源代码片段生成的SQL语句对应的SQL模板为:
SELECT*FROM users WHERE name=$AND passwd=$
步骤502:Web客户端生成包含SQL语句和语义信息的提交数据。
其中,提交数据为:
[SELECT*FROM users WHERE name=$AND passwd=$]SELECT*FROM users WHERE name='admin’AND passwd='123456'
其中,“[”为起始符号,“]”为结束符号,起始符号结束符号之间为上述SQL模板,结束符号之后为SQL语句。
步骤503:Web客户端将提交数据发送至数据库服务器。
步骤504:数据库服务器接收Web客户端发送来的提交数据。
步骤505:数据库服务器提取所述提交数据中的SQL模板和SQL语句。
步骤506:生成SQL模板的语法树和SQL语句的语法树。
其中,SQL模板的语法树如图6所示,SQL语句的语法树如图7所示。
步骤507:数据库服务器经比对确定SQL模板的语法树与SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置。
步骤508:数据库服务器执行SQL语句。
本发明实施例在通过向SQL语句中嵌入语义信息并根据该语义信息对SQL语句进行检测,以实现对SQL注入的检测,能够有效避免攻击者通过SQL注入获得服务器中的敏感数据,对应用程序造成攻击,实现无漏报、无误报。
实施例三
如图8所示,以检测包括SQL注入的用户登录语句为例,对本发明对本发明实施例中防御SQL注入的的方法进行详细说明,该方法包括步骤801-步骤808:
步骤801:Web客户端接收用户输入的数据,其中,用户名name为admin,密码password为'or1='1。
其中,Web客户端生成SQL语句的源代码片段为:
"SELECT*FROM users WHERE user='"+name+"'AND passwd='"+pass+"'"
与该源代码片段生成SQL语句对应的SQL模板为:
SELECT*FROM users WHERE name=$AND passwd=$
步骤802:Web客户端生成包含SQL语句和语义信息的提交数据。
其中,提交数据为:
[SELECT*FROM users WHERE name=$AND passwd=$]SELECT*FROM users WHERE name='admin’AND passwd=''or1=’1’
其中,“[”为起始符号,“]”为结束符号,起始符号结束符号之间为上述SQL模板,结束符号之后为SQL语句。
步骤803:Web客户端将提交数据发送至数据库服务器。
步骤804:数据库服务器接收Web客户端发送来的提交数据。
步骤805:数据库服务器提取所述提交数据中的SQL模板和SQL语句。
步骤806:生成SQL模板的语法树和SQL语句的语法树。
其中,SQL模板的语法树如图6所示,SQL语句的语法树如图9所示。
步骤807:数据库服务器经比对确定SQL模板的语法树与SQL语句的语法树中各对应位置的节点不相同,该对应位置不包括预设变量符号所在的位置。
步骤808:数据库服务器器触发告警操作,并丢弃所述提交数据。
本发明实施例在通过向SQL语句中嵌入语义信息并根据该语义信息对SQL语句进行检测,以实现对SQL注入的检测,能够有效避免攻击者通过SQL注入获得服务器中的敏感数据,对应用程序造成攻击,实现无漏报、无误报。
本发明还提供一种防御SQL注入的装置,如图10所示,为本发明实施例中用于Web客户端的防御SQL注入的装置示意图,所述装置包括:
语义信息嵌入模块1001,用于在向数据库服务器发送结构化查询语言SQL语句之前,将语义信息嵌入到所述SQL语句中,生成包含所述SQL语句和所述语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;
发送模块1002,用于向数据库服务器发送所述提交数据。
本发明实施例还一种防御SQL注入的装置,如图11所示,为本发明实施例中用于中间件的防御SQL注入的装置示意图,所述装置包括:
接收模块1101,用于接收Web客户端发送来的包含SQL语句和语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;
提取模块1102,用于根据起始符号和结束符号提取所述提交数据中的SQL模板和SQL语句;
比对模块1103,用于比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置;
第一确定模块1104,用于当比对结果为相同时,确定所述SQL语句中不存在SQL注入;
第二确定模块1105,用于当比对结果为不相同时,确定所述SQL语句中存在SQL注入。
其中,在一个实施例中,如图12所示,所述比对模块1103包括:
第一比对单元1106,用于比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的字符串是否相同;或
第二比对单元1107,用于比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的哈希值是否相同。
其中,在一个实施例中,如图12所示,所述装置还包括:
提交模块1108,用于当确定所述SQL语句中不存在SQL注入时,将所述SQL语句提交至数据库服务器执行;
告警模块1109,用于当确定所述SQL语句中存在SQL注入时,触发告警操作;并丢弃所述提交数据。
本发明实施例还提供一种防御SQL注入的装置,如图13所示为本发明实施例中用于数据库服务器的防御SQL注入的装置的示意图,所述装置包括:
接收模块1301,用于接收Web客户端发送来的包含SQL语句和语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;
提取模块1302,用于根据起始符号和结束符号提取所述提交数据中的SQL模板和SQL语句;
比对模块1303,比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置;
第一确定模块1304,用于当比对结果为相同时,确定所述SQL语句中不存在SQL注入;
第二确定模块1305,用于当比对结果为不相同时,确定所述SQL语句中存在SQL注入。
其中,在一个实施例中,如图14所示,所述比对模块1303包括:
第一比对单元1306,用于比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的字符串是否相同;或
第二比对单元1307,用于比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的哈希值是否相同。
其中,在一个实施例中,如图14所示,所述装置还包括:
执行模块1308,用于当确定所述SQL语句中不存在SQL注入时,执行所述SQL语句;
告警模块1309,用于当确定所述SQL语句中存在SQL注入时,触发告警操作;并丢弃所述提交数据。
本发明实施例还提供一种防御SQL注入的系统,如图15所示,所述系统包括:
Web客户端1501,用于在向数据库服务器发送结构化查询语言SQL语句之前,将语义信息嵌入到所述SQL语句中,生成包含所述SQL语句和所述语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;并向数据库服务器发送所述提交数据;
服务器1502,用于接收Web客户端发送来的包含所述SQL语句和所述语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;根据起始符号和结束符号提取所述提交数据中的SQL模板和SQL语句;比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置;当比对结果为相同时,确定所述SQL语句中不存在SQL注入;当比对结果为不相同时,确定所述SQL语句中存在SQL注入;当确定所述SQL语句中不存在SQL注入时,执行所述SQL语句。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (17)

1.一种防御SQL注入的方法,用于Web客户端,其特征在于,所述方法包括:
在向数据库服务器发送结构化查询语言SQL语句之前,将语义信息嵌入到所述SQL语句中,生成包含所述SQL语句和所述语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;
向数据库服务器发送所述提交数据。
2.根据权利要求1所述的方法,其特征在于,
所述SQL模板为将Web客户端源代码片段中用户输入的内容部分,用预设的变量符号代替后生成的SQL语句。
3.根据权利要求1或2所述的方法,其特征在于,
所述SQL模板已预先按照所述Web客户端的源代码编写规范嵌入至相应的源代码片段中,以使所述Web客户端在生成所述SQL语句时能够嵌入相应的SQL模板。
4.一种防御SQL注入的方法,用于中间件,其特征在于,所述方法包括:
接收Web客户端发送来的包含SQL语句和语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;
根据起始符号和结束符号提取所述提交数据中的SQL模板和SQL语句;
比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置;
当比对结果为相同时,确定所述SQL语句中不存在SQL注入;
当比对结果为不相同时,确定所述SQL语句中存在SQL注入。
5.根据权利要求4所述的方法,其特征在于,
所述比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同包括:
比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的字符串是否相同;或
比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的哈希值是否相同。
6.根据权利要求4所述的方法,其特征在于,所述方法还包括:
当确定所述SQL语句中不存在SQL注入时,将所述SQL语句提交至数据库服务器执行;
当确定所述SQL语句中存在SQL注入时,触发告警操作;并丢弃所述提交数据。
7.一种防御SQL注入的方法,用于数据库服务器,其特征在于,所述方法包括:
接收Web客户端发送来的包含SQL语句和语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;
根据起始符号和结束符号提取所述提交数据中的SQL模板和SQL语句;
比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置;
当比对结果为相同时,确定所述SQL语句中不存在SQL注入;
当比对结果为不相同时,确定所述SQL语句中存在SQL注入。
8.根据权利要求7所述的方法,其特征在于,
所述比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同包括:
比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的字符串是否相同;或
比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的哈希值是否相同。
9.根据权利要求7所述的方法,其特征在于,所述方法还包括:
当确定所述SQL语句中不存在SQL注入时,执行所述SQL语句;
当确定所述SQL语句中存在SQL注入时,触发告警操作;并丢弃所述提交数据。
10.一种防御SQL注入的装置,用于Web客户端,其特征在于,所述装置包括:
语义信息嵌入模块,用于在向数据库服务器发送结构化查询语言SQL语句之前,将语义信息嵌入到所述SQL语句中,生成包含所述SQL语句和所述语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;
发送模块,用于向数据库服务器发送所述提交数据。
11.一种防御SQL注入的装置,用于中间件,其特征在于,所述装置包括:
接收模块,用于接收Web客户端发送来的包含SQL语句和语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;
提取模块,用于根据起始符号和结束符号提取所述提交数据中的SQL模板和SQL语句;
比对模块,用于比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置;
第一确定模块,用于当比对结果为相同时,确定所述SQL语句中不存在SQL注入;
第二确定模块,用于当比对结果为不相同时,确定所述SQL语句中存在SQL注入。
12.根据权利要求11所述的装置,其特征在于,所述比对模块包括:
第一比对单元,用于比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的字符串是否相同;或
第二比对单元,用于比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的哈希值是否相同。
13.根据权利要求11所述的装置,其特征在于,所述装置还包括:
提交模块,用于当确定所述SQL语句中不存在SQL注入时,将所述SQL语句提交至数据库服务器执行;
告警模块,用于当确定所述SQL语句中存在SQL注入时,触发告警操作;并丢弃所述提交数据。
14.一种防御SQL注入的装置,用于数据库服务器,其特征在于,所述装置包括:
接收模块,用于接收Web客户端发送来的包含SQL语句和语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;
提取模块,用于根据起始符号和结束符号提取所述提交数据中的SQL模板和SQL语句;
比对模块,用于比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置;
第一确定模块,用于当比对结果为相同时,确定所述SQL语句中不存在SQL注入;
第二确定模块,用于当比对结果为不相同时,确定所述SQL语句中存在SQL注入。
15.根据权利要求14所述的装置,其特征在于,所述比对模块包括:
第一比对单元,用于比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的字符串是否相同;或
第二比对单元,用于比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点的哈希值是否相同。
16.根据权利要求14所述的装置,其特征在于,所述装置还包括:
执行模块,用于当确定所述SQL语句中不存在SQL注入时,执行所述SQL语句;
告警模块,用于当确定所述SQL语句中存在SQL注入时,触发告警操作;并丢弃所述提交数据。
17.一种防御SQL注入的系统,其特征在于,所述系统包括:
Web客户端,用于在向数据库服务器发送结构化查询语言SQL语句之前,将语义信息嵌入到所述SQL语句中,生成包含所述SQL语句和所述语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;并向数据库服务器发送所述提交数据;
服务器,用于接收Web客户端发送来的包含所述SQL语句和所述语义信息的提交数据,其中,所述语义信息包括与所述SQL语句对应的SQL模板和用于标记所述SQL模板的位置的起始符号和结束符号;根据起始符号和结束符号提取所述提交数据中的SQL模板和SQL语句;比对所述SQL模板的语法树与所述SQL语句的语法树中各对应位置的节点是否相同,该对应位置不包括预设变量符号所在的位置;当比对结果为相同时,确定所述SQL语句中不存在SQL注入;当比对结果为不相同时,确定所述SQL语句中存在SQL注入;当确定所述SQL语句中不存在SQL注入时,执行所述SQL语句。
CN201410318865.2A 2014-07-04 2014-07-04 一种防御sql注入的方法、装置及系统 Pending CN104123497A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410318865.2A CN104123497A (zh) 2014-07-04 2014-07-04 一种防御sql注入的方法、装置及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410318865.2A CN104123497A (zh) 2014-07-04 2014-07-04 一种防御sql注入的方法、装置及系统

Publications (1)

Publication Number Publication Date
CN104123497A true CN104123497A (zh) 2014-10-29

Family

ID=51768905

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410318865.2A Pending CN104123497A (zh) 2014-07-04 2014-07-04 一种防御sql注入的方法、装置及系统

Country Status (1)

Country Link
CN (1) CN104123497A (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105046150A (zh) * 2015-08-06 2015-11-11 福建天晴数码有限公司 防止sql注入的方法及系统
CN105930453A (zh) * 2016-04-21 2016-09-07 乐视控股(北京)有限公司 重复性分析方法及装置
CN106156623A (zh) * 2016-07-29 2016-11-23 江西师范大学 基于意图的sqlia防御方法
CN106549930A (zh) * 2016-08-17 2017-03-29 北京安天电子设备有限公司 一种抵抗sql注入攻击的方法及系统
CN107122657A (zh) * 2017-05-02 2017-09-01 上海红神信息技术有限公司 一种防御sql注入攻击的数据库代理装置
CN107391384A (zh) * 2017-08-14 2017-11-24 中国银行股份有限公司 一种sql语句检测方法及系统
CN107451473A (zh) * 2017-07-27 2017-12-08 杭州美创科技有限公司 基于特征模式识别的sql注入检测方法
CN107766381A (zh) * 2016-08-22 2018-03-06 北京京东尚科信息技术有限公司 数据查询方法、系统及电子设备
CN109753513A (zh) * 2018-12-19 2019-05-14 国网新疆电力有限公司电力科学研究院 一种基于正则表达式匹配的输变配台帐核查方法及系统
CN112966268A (zh) * 2021-03-02 2021-06-15 全球能源互联网研究院有限公司 基于神经网络模型和哈希匹配的sql检测方法及系统
US11334569B2 (en) * 2020-01-21 2022-05-17 International Business Machines Corporation Unique SQL query transfer for anomaly detection

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101267357B (zh) * 2007-03-13 2010-11-17 北京启明星辰信息技术股份有限公司 一种sql注入攻击检测方法及系统
CN102833270A (zh) * 2012-09-18 2012-12-19 山石网科通信技术(北京)有限公司 Sql注入攻击的检测方法、装置和具有该装置的防火墙
CN102185930B (zh) * 2011-06-09 2013-04-03 北京理工大学 一种sql注入漏洞检测方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101267357B (zh) * 2007-03-13 2010-11-17 北京启明星辰信息技术股份有限公司 一种sql注入攻击检测方法及系统
CN102185930B (zh) * 2011-06-09 2013-04-03 北京理工大学 一种sql注入漏洞检测方法
CN102833270A (zh) * 2012-09-18 2012-12-19 山石网科通信技术(北京)有限公司 Sql注入攻击的检测方法、装置和具有该装置的防火墙

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105046150B (zh) * 2015-08-06 2017-10-17 福建天晴数码有限公司 防止sql注入的方法及系统
CN105046150A (zh) * 2015-08-06 2015-11-11 福建天晴数码有限公司 防止sql注入的方法及系统
CN105930453A (zh) * 2016-04-21 2016-09-07 乐视控股(北京)有限公司 重复性分析方法及装置
CN106156623A (zh) * 2016-07-29 2016-11-23 江西师范大学 基于意图的sqlia防御方法
CN106156623B (zh) * 2016-07-29 2018-10-30 江西师范大学 基于意图的sqlia防御方法
CN106549930A (zh) * 2016-08-17 2017-03-29 北京安天电子设备有限公司 一种抵抗sql注入攻击的方法及系统
CN107766381A (zh) * 2016-08-22 2018-03-06 北京京东尚科信息技术有限公司 数据查询方法、系统及电子设备
CN107122657A (zh) * 2017-05-02 2017-09-01 上海红神信息技术有限公司 一种防御sql注入攻击的数据库代理装置
CN107122657B (zh) * 2017-05-02 2021-01-01 上海红神信息技术有限公司 一种防御sql注入攻击的数据库代理装置
CN107451473A (zh) * 2017-07-27 2017-12-08 杭州美创科技有限公司 基于特征模式识别的sql注入检测方法
CN107391384A (zh) * 2017-08-14 2017-11-24 中国银行股份有限公司 一种sql语句检测方法及系统
CN109753513A (zh) * 2018-12-19 2019-05-14 国网新疆电力有限公司电力科学研究院 一种基于正则表达式匹配的输变配台帐核查方法及系统
US11334569B2 (en) * 2020-01-21 2022-05-17 International Business Machines Corporation Unique SQL query transfer for anomaly detection
US11847122B2 (en) 2020-01-21 2023-12-19 International Business Machines Corporation Unique SQL query transfer for anomaly detection
CN112966268A (zh) * 2021-03-02 2021-06-15 全球能源互联网研究院有限公司 基于神经网络模型和哈希匹配的sql检测方法及系统

Similar Documents

Publication Publication Date Title
CN104123497A (zh) 一种防御sql注入的方法、装置及系统
Gupta et al. XSS-secure as a service for the platforms of online social network-based multimedia web applications in cloud
Lee et al. A novel method for SQL injection attack detection based on removing SQL query attribute values
CN112131882A (zh) 一种多源异构网络安全知识图谱构建方法及装置
Chaudhuri et al. Symbolic security analysis of ruby-on-rails web applications
Kamtuo et al. Machine Learning for SQL injection prevention on server-side scripting
US20170034314A1 (en) Validation associated with a form
US20130139217A1 (en) Method and apparatus for executing security policy script, security policy system
CN106874768A (zh) 渗透测试的方法及装置
CN103780614A (zh) 一种基于模拟攻击扩展的sql注入漏洞挖掘方法
Chandrashekhar et al. SQL injection attack mechanisms and prevention techniques
Akrout et al. An automated black box approach for web vulnerability identification and attack scenario generation
CN109067717B (zh) 一种检测sql注入漏洞的方法及装置
He et al. TextExerciser: feedback-driven text input exercising for android applications
CN113190838A (zh) 一种基于表达式的web攻击行为检测方法及系统
CN111143808B (zh) 系统安全认证方法、装置及计算设备、存储介质
Li et al. Large-scale third-party library detection in android markets
US9177123B1 (en) Detecting illegitimate code generators
Ma et al. Finding flaws from password authentication code in android apps
CN102426592B (zh) 一种基于动态口令的数据库初始化方法
CN101833505B (zh) 一种软件系统安全缺陷检测方法
Kumar et al. Detection and Prevention of SQL Injection attack
CN113542204B (zh) 防护规则生成方法、装置和存储介质
Nembhard et al. Extracting knowledge from open source projects to improve program security
Setiyani et al. Comparison of the Performance of the SQL Injection Detection Model Using CNN, Logistic Regression, Random Forest, Naive Bayes, and Decision Tree

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20141029