CN113158188A - 检测sql注入攻击的方法及装置、电子设备 - Google Patents
检测sql注入攻击的方法及装置、电子设备 Download PDFInfo
- Publication number
- CN113158188A CN113158188A CN202110328626.5A CN202110328626A CN113158188A CN 113158188 A CN113158188 A CN 113158188A CN 202110328626 A CN202110328626 A CN 202110328626A CN 113158188 A CN113158188 A CN 113158188A
- Authority
- CN
- China
- Prior art keywords
- sql
- suspicious
- target application
- function
- java
- 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
- 238000002347 injection Methods 0.000 title claims abstract description 85
- 239000007924 injection Substances 0.000 title claims abstract description 85
- 238000000034 method Methods 0.000 title claims abstract description 66
- 239000003795 chemical substances by application Substances 0.000 claims abstract description 23
- 230000006870 function Effects 0.000 claims description 65
- 238000001514 detection method Methods 0.000 claims description 40
- 238000012550 audit Methods 0.000 claims description 17
- 238000012545 processing Methods 0.000 claims description 13
- 230000000007 visual effect Effects 0.000 claims description 7
- 230000008569 process Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 241000590419 Polygonia interrogationis Species 0.000 description 3
- 238000012800 visualization Methods 0.000 description 3
- 238000005422 blasting Methods 0.000 description 2
- 238000007477 logistic regression Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 238000012552 review Methods 0.000 description 2
- 238000012216 screening Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 239000007983 Tris buffer Substances 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000003066 decision tree Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- LENZDBCJOHFCAS-UHFFFAOYSA-N tris Chemical compound OCC(N)(CO)CO LENZDBCJOHFCAS-UHFFFAOYSA-N 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- 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/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Health & Medical Sciences (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注入攻击的方法及装置、电子设备。所述方法包括:基于部署在目标应用上的java代理程序拦截所述目标应用发送的涉及数据库连接的函数;获取所拦截的函数中sql参数,并确定所述sql参数中是否存在第一预设字符;如果是,将所述函数所调用的sql语句确定为可疑sql;其中,所述可疑sql为疑似sql注入攻击的sql语句。
Description
技术领域
本申请实施例涉及互联网技术领域,尤其涉及一种检测sql注入攻击的方法及装置、电子设备。
背景技术
sql注入攻击是指在正常sql语句中插入恶意代码,以使服务器在执行sql语句时一并执行恶意代码的攻击方式。
在相关技术中,检测sql注入攻击的方式通常是借助检测工具。例如基于sqlmap工具检测sql注入。sqlmap是一个开源的注入攻击检测工具,使用该工具主要分为三步,第一步先通过测试人员拿到待检测系统的所有url,第二步使用sqlmap工具对所有url进行sql注入测试,第三步当发现sql注入攻击时获取数据库数据。其中,sqlmap工具原理主要使用字典进行爆破检测sql注入,由于字典的容量有限无法穷举所有攻击,因此实际应用中存在漏检的问题。
发明内容
本说明书实施例提供的一种检测sql注入攻击的方法及装置、电子设备:
根据本说明书实施例的第一方面,提供一种检测sql注入攻击的方法,所述方法包括:
基于部署在目标应用上的java代理程序拦截所述目标应用发送的涉及数据库连接的函数;
获取所拦截的函数中的sql参数,并确定所述sql参数中是否存在第一预设字符;
如果是,将所述函数所调用的sql语句确定为可疑sql;其中,所述可疑sql为疑似sql注入攻击的sql语句。
可选的,所述java代理程序通过如下方式部署在目标应用上:
在目标应用对应的服务器的启动命令行中添加“-javaagent”命令。
可选的,所述拦截所述目标应用发送的涉及数据库连接的函数,包括:
拦截所述目标应用发送的涉及数据库连接中执行动态sql的函数;和/或,拦截所述目标应用发送的涉及数据库连接中执行预编译sql的函数。
可选的,所述执行动态sql的函数,包括以下至少一种:
java.sql.Statement子类的execute(String sql)方法
java.sql.Statement子类的executeQuery(String sql)方法
java.sql.Statement子类的executeUpdate(String sql)方法。
可选的,所述执行预编译sql的函数,包括:
java.sql.Connection子类的prepareStatement(String sql)方法。
可选的,所述方法还包括:
将可疑sql中第一预设字符和所述第一预设字符包含的内容替换为第二预设字符,并合并相同的可疑sql语句。
可选的,所述第一预设字符包括引号,所述第二预设字符包括问号。
可选的,所述方法还包括:
将所述可疑sql输出到审核平台,根据所述审核平台返回的审核结果对所述可疑sql进行处理。
可选的,所述审核平台基于审核规则确定所述可疑sql是否属于sql注入攻击;如果审核平台无法识别则通过可视化方式展示所述可疑sql。
可选的,所述基于审核规则确定所述可疑sql是否属于sql注入攻击,包括:
获取所述目标应用发送的http请求的入参;
比较所述可疑sql中的第一预设字符包含的内容,与Http请求的入参是否相同;
如果相同,则确定所述可疑sql属于sql注入攻击。
可选的,所述方法还包括:
在确定可疑sql后,将所述可疑sql与本地维护的误报sql进行比较;其中,所述误报sql为被确定为非sql注入攻击的历史可疑sql;
在任一可疑sql与误报sql相同时,将该可疑sql修改为正常sql。
根据本说明书实施例的第二方面,提供一种检测sql注入攻击的装置,所述装置包括:
拦截单元,基于部署在目标应用上的java代理程序拦截所述目标应用发送的涉及数据库连接的函数;
检测单元,获取所拦截的函数中的sql参数,并确定所述sql参数中是否存在第一预设字符;
确定单元,如果是,将所述函数所调用的sql语句确定为可疑sql;其中,所述可疑sql为疑似sql注入攻击的sql语句。
可选的,所述java代理程序通过如下子单元部署在目标应用上:
部署子单元,在目标应用对应的服务器的启动命令行中添加“-javaagent”命令。
可选的,所述拦截单元中,拦截所述目标应用发送的涉及数据库连接的函数,包括:
拦截所述目标应用发送的涉及数据库连接中执行动态sql的函数;和/或,拦截所述目标应用发送的涉及数据库连接中执行预编译sql的函数。
可选的,所述执行动态sql的函数,包括以下至少一种:
java.sql.Statement子类的execute(String sql)方法
java.sql.Statement子类的executeQuery(String sql)方法
java.sql.Statement子类的executeUpdate(String sql)方法。
可选的,所述执行预编译sql的函数,包括:
java.sql.Connection子类的prepareStatement(String sql)方法。
可选的,所述装置还包括:
合并单元,将可疑sql中第一预设字符和所述第一预设字符包含的内容替换为第二预设字符,并合并相同的可疑sql语句。
可选的,所述第一预设字符包括引号,所述第二预设字符包括问号。
可选的,所述装置还包括:
处理单元,将所述可疑sql输出到审核平台,根据所述审核平台返回的审核结果对所述可疑sql进行处理。
可选的,所述审核平台基于审核规则确定所述可疑sql是否属于sql注入攻击;如果审核平台无法识别则通过可视化方式展示所述可疑sql。
可选的,所述基于审核规则确定所述可疑sql是否属于sql注入攻击,包括:
获取所述目标应用发送的http请求的入参;比较所述可疑sql中的第一预设字符包含的内容,与Http请求的入参是否相同;如果相同,则确定所述可疑sql属于sql注入攻击。
可选的,所述装置还包括:
筛选单元,在确定可疑sql后,将所述可疑sql与本地维护的误报sql进行比较;在任一可疑sql与误报sql相同时,将该可疑sql修改为正常sql;其中,所述误报sql为被确定为非sql注入攻击的历史可疑sql。
根据本说明书实施例的第三方面,提供一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为上述任一项检测sql注入攻击的方法。
本说明书实施例提供了检测sql注入攻击的方案,通过java代理程序拦截目标应用发送的所有涉及数据库连接的函数,分析所述函数中的sql参数,如果sql参数包含有第一预设字符(即风险字符),则输出对应的函数所调用的可疑sql,这些输出的可疑sql就是疑似sql注入攻击的sql语句。如此,基于java代理技术对所有存在sql注入可能的sql语句进行全覆盖检测,避免漏检的问题。
附图说明
图1是本说明书一实施例提供的检测sql注入攻击的方法的流程图;
图2是本说明书一实施例提供的检测sql注入攻击的装置的硬件结构图;
图3是本说明书一实施例提供的检测sql注入攻击的装置的模块示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
在相关技术中,检测sql注入攻击的方式通常是借助检测工具。例如基于sqlmap工具检测sql注入。sqlmap是一个开源的注入攻击检测工具,使用该工具主要分为三步,第一步先通过测试人员拿到待检测系统的所有url,第二步使用sqlmap工具对所有url进行sql注入测试,第三步当发现sql注入攻击时获取数据库数据。其中,sqlmap工具原理主要使用字典进行爆破检测sql注入,由于字典的容量有限无法穷举所有攻击,因此实际应用中存在漏检的问题。
其中,sql注入攻击是指在正常sql语句中插入恶意代码,以使服务器在执行sql语句时一并执行恶意代码的攻击方式。
以下通过一个示例来简单介绍sql注入攻击。例如,关于一个提供用户身份信息查询的系统。该系统对外提供有一个根据用户名密码来查询身份信息的接口,请求的url假设为:
http://example.com/getInfomation?Username=admin&password=123。
正常情况下,此url在访问时需要请求者输入账号和密码,在后台业务逻辑代码中使用select*from AUTH_USER where username=’”+username+“’and password=’”+password+”’”,查询数据库并返回相应身份信息。
而当恶意攻击者在密码处输入自定义的字符串’or‘1’=‘1时,整体的查询sql语句就会变为select*from AUTH_USER where username=’admin’and password=’ ’or‘1’=‘1’,此sql语句就会返回数据库中所有用户的信息,从而造成用户身份信息的泄露。
由此可知,存在sql注入攻击的根本原因在于在sql语句中拼接了自定义变量,该自定义变量由第一预设字符(如引号)定义。拼接了自定义变量的sql语句会改变原sql语句的逻辑,从而绕过了原sql语句的限制,拿到超越权限的数据。
为此,本说明书提供了一种提前检测sql注入攻击的方案,具体通过java代理程序拦截目标应用发送的所有涉及数据库连接的函数,分析所述函数中的sql参数,如果sql参数包含有第一预设字符(即风险字符),则输出对应的函数所调用的可疑sql,这些输出的可疑sql就是疑似sql注入攻击的sql语句。如此,基于java代理技术对所有存在sql注入可能的sql语句进行全覆盖检测,避免漏检的可能。
以下可以参考图1所示的一种检测sql注入攻击的方法为例加以介绍。所述方法可以包括以下步骤:
步骤210:基于部署在目标应用上的java代理程序拦截所述目标应用发送的涉及数据库连接(Java Data Base Connectivity,JDBC)的函数。
该实施例可以应用于检测端,所述检测端可以包括目标应用所在的客户端,例如安装有目标应用的终端设备。
所述检测端也可以是指目标应用本身,即将检测逻辑写到目标应用中,以使目标应用执行实施例中的步骤。
其中,所述目标应用可以是包括web应用、微服务应用等。
在具体实现时,所述java代理程序可以通过如下方式部署在目标应用上:
在目标应用对应的服务器的启动命令行中添加“-javaagent”命令。
在java技术中,自JDK1.5引入javaagent(java代理)机制,javaagent是一个jar包,其启动方式与普通jar包略有不同。对于普通jar包,需要通过指定类的main函数进行启动,但是javaagent并不能单独启动,需要依附在一个java应用程序运行。Javaagent主要有2个功能,第一javaagent可以在加载java文件之前拦截java文件并对文件字节码进行修改;第二可以在运行期将已经记载的类的字节码做变更。
因此,javaagent可以实现无侵入式部署,在目标应用对应的服务器如tomcat、jetty的启动命令行中添加”-javaagent”命令。这样javaagent程序就会部署在将要启动的目标应用上。
值得一提的是,如果目标应用为分布式应用,则需要在所述分布式应用中的每个节点都可以部署javaagent。
其中,JDBC是一种用于执行SQL语句的Java API,可以为关系型数据库(如MySQL数据库、Oracle数据库等)提供统一的访问入口,所述访问入口通常由一组用Java语言编写的类和接口组成。数据库开发人员通过JDBC能够编写针对数据库的应用程序,例如通过JDBC的函数可以构建sql语句与数据库之间的通道,从而使得数据库基于sql语句执行对应操作。
在一实施例中,所述拦截所述目标应用发送的涉及数据库连接的函数,包括:
拦截所述目标应用发送的涉及数据库连接中执行动态sql的函数;和/或,拦截所述目标应用发送的涉及数据库连接中执行预编译sql的函数。
其中,所述执行动态sql的函数,包括以下至少一种:
java.sql.Statement子类的execute(String sql)方法
java.sql.Statement子类的executeQuery(String sql)方法
java.sql.Statement子类的executeUpdate(String sql)方法。
拦截这3种方法就可以获取到具体的sql语句,进而可以分析sql语句。
其中,所述执行预编译sql的函数,包括:
java.sql.Connection子类的prepareStatement(String sql)方法。
所述方法会返回一个预编译查询的PreparedStatement对象,所述PreparedStatement对象用于负责与数据库进行交互。拦截该方法就可以获取预编译的sql语句,进而可以分析sql语句。
步骤220:获取所拦截的函数中的sql参数,并确定所述sql参数中是否存在第一预设字符;
步骤230:如果是,将所述函数所调用的sql语句确定为可疑sql;其中,所述可疑sql为疑似sql注入攻击的sql语句。
拦截了JDBC相关函数后,进一步可以获取函数中的函数名和sql参数。
如前所述的,存在sql注入攻击的根本原因在于在sql语句中拼接了自定义变量,原本定义的sql语句中会使用第一预设字符将自定义变量包裹起来,但是注入攻击者会对自定义变量进行篡改,从而使sql语句改变原有逻辑,这样就可以绕过原本sql语句的限制,拿到超越自己权限的数据。
其中,所述第一预设字符可以包括引号,例如单引号、双引号或反引号。
所以检测是否存在注入攻击就是检测以上拦截的JDBC相关函数中的sql参数,判断sql参数是否存在第一预设字符。
如果不存在,则说明该sql语句中没有自定义变量,因此也就不存在通过自定义变量实施sql注入攻击的行为。针对这种正常的sql语句,则放行该正常的sql语句对应的JDBC函数,即允许该JDBC函数发送给数据库。
如果存在,则说明该sql语句中存在有自定义变量,因此可能会是被注入攻击者改造的自定义变量,从而可以将这样的sql语句确定为可疑sql。
在本实施例中,通过部署java代理程序,使得java代理程序可以在目标应用运行期间拦截目标应用发送的JDBC相关函数,从而实现动态检测sql注入攻击。这里的动态是指,检测过程是在目标应用运行过程中持续进行检测:当用户在目标应用上进行操作时会触发读取数据库,从而被部署的java代理拦截sql语句,以及由检测端检测sql语句。
在图1所述实施例的基础上,所述方法还可以包括:
将所述可疑sql输出到审核平台,根据所述审核平台返回的审核结果对所述可疑sql进行处理。
该实施例中,由于步骤230确定的可疑sql为疑似sql注入攻击的sql语句,因此还可以进一步判断可疑sql是否是sql注入攻击。为此,可以将可疑sql输出到审核平台,由该审核平台对可疑sql进行判断。
在一实施例中,所述审核平台可以基于审核规则确定所述可疑sql是否属于sql注入攻击。
所述审核规则可以包括比较可疑sql中第一预设字符包含的内容,与Http请求的入参是否相同,如果相同,则确定属于sql注入攻击。
为此,需要拦截目标应用发送的Http请求,以获取入参。所述入场可以包括POST参数和GET拼接的参数。
该实施例中,通过比较Http请求的入参与第一预设字符包含的内容,可以确定可疑sql中第一预设字符包含的内容是否是由用户在页面输入(即http请求的入参),进而在确定是由用户在页面输入(即一致)时,确定可疑sql属于sql注入攻击。
在一实施例中,所述审核平台上可以部署有预先训练好的识别模型。所述识别模型用于对输入的可疑sql进行自动识别。
通常,通过设置合理的函数,可以借助已有的大数据处理技术从这些大数据中找出规律。例如逻辑回归(logistic回归),GBDT(Gradient Boosting Decision Tree),甚至深度学习等机器学习方法,都可以被用于针对这些大数据进行建模,从而得出函数中各个参数的系数,进而可以得到统一的方程或者计算公式。
在该实施例中,可以收集大量的样本数据(部分标记为sql注入攻击的sql语句和部分标记为非sql注入攻击的sql语句),并基于机器学习算法训练风险模型;通过持续地学习可以不断完善所述风险模型,当该风险模型达到预计(例如识别准确性符合业务要求)时,即可以上线并使用风险模型。在审核平台运行时,对于输入的可疑sql,可以利用上述风险模型计算出一个风险概率。该风险概率一般位于0和1之间的值。例如越接近1表示风险越大,越接近0表示风险越小。而当风险概率大于一个阈值时,就可以认为可疑sql为sql注入攻击;当风险概率小于阈值时,就可以认为可疑sql为非sql注入攻击。
审核平台在获取到风险模型输出结果后,向前述检测端返回审核结果。以使检测端基于审核结果对可疑sql进行处理。
例如,当审核结果表示sql注入攻击时,不执行可疑sql;当审核结果表示非sql注入攻击时,正常执行可疑sql。
通过该实施例,通过快速检测可以放行大部分正常sql,而针对快速检测得到的可疑sql进一步通过深度检测来确定是否为sql注入攻击。如此,通过快速检测和深度检测配合,即保证了检测准确率,又提高了检测效率(无需对大量正常sql进行深度检测,减少了深度检测的检测量)。
在实际应用中,审核平台可以存在部分无法识别的可疑sql,针对无法识别的可疑sql,审核平台可以通过可视化方式展示所述可疑sql,以由人工审核。当然,在有的实施例中,检测端确定的可疑sql也可以全部由人工审核。
例如,对于风险模型,当风险概率位于中间概率范围时,无法准确得出结果。例如位于[0.4-0.6]时,即可能是sql注入攻击,也可能是非sql注入攻击。
在人工审核时,可以通过可视化技术将可疑sql展示在可视化界面,工作人员可以在可视化界面对可疑sql所在的源码位置进行定位进而根据经验确定是否存在sql注入攻击。
在一实施例中,不同的可疑sql中第一预设字符内的参数可能都不相同,但是这些可疑sql的逻辑是相同的。
例如,select*from db where name=’张三’;
select*from db where name=’李四’。
这两个sql中,一个参数是张三,另一个参数是李四;从sql内容上看是两个不同的sql,但是这两个sql的逻辑是相同的,都是获取用户的数据。
通常人工审核是基于sql逻辑进行判断的,因此对于逻辑相同的不同sql,无需一一进行展示。具体地,可以将可疑sql中第一预设字符和所述第一预设字符包含的内容替换为第二预设字符,并合并相同的可疑sql语句。
其中,所述第二预设字符包括以下任意一种:问号、句号、感叹号。
当数据库为关系型数据库时,JDBC原生支持两种形式的参数,一种用问号的预编译形式,另一种是用引号的sql拼接形式。这里将拼接形式转换为预编译形式,即将引号以及引号中的内容整体替换为问号。
例如,将上述两条sql中引号(即第一预设字符)部分用问号?(即第二预设字段)代替,从而可以合并为一条sql,即select*from db where name=?。
如此,可视化平台展示的可疑sql可以是按照合并后的sql进行展示。当工作人员确定合并后的sql的审核结果后,相应也就确定了该合并sql对应合并前的可疑sql的审核结果。
在一实施例中,可视化平台还具有误报标记功能,当工作人员确认可疑sql为非注入攻击后,可以对其进行标记。此功能随着版本不断的迭代,误报的可疑sql会越来越少,从而降低深度检测的消耗。
相应地,检测端可以在本地维护有被误报的历史可疑sql,这些被误报的历史可疑sql称为误报sql。检测端可以定期从服务端获取最新的误报sql,以更新本地维护的误报sql;或者所述服务端可以向检测端下发最新的误报sql,以使检测端更新本地维护的误报sql。
检测端在步骤240确定了可疑sql后,还可以包括:
将可疑sql与本地维护的误报sql进行比较;在任一可疑sql与误报sql相同时,将该可疑sql修改为正常sql。
通过误报标记,可以使得检测端过滤掉已经被证实为非注入攻击的可疑sql,这样当后续出现可疑sql为误报sql后就不需要重复进行深度检测。
与前述检测sql注入攻击的方法实施例相对应,本说明书还提供了检测sql注入攻击的装置的实施例。所述装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机业务程序指令读取到内存中运行形成的。从硬件层面而言,如图2所示,为本说明书检测sql注入攻击的装置所在设备的一种硬件结构图,除了图2所示的处理器、网络接口、内存以及非易失性存储器之外,实施例中装置所在的设备通常根据检测sql注入攻击的实际功能,还可以包括其他硬件,对此不再赘述。
请参见图3,为本说明书一实施例提供的检测sql注入攻击的装置的模块图,所述装置对应了图1所示实施例,所述装置包括:
拦截单元310,基于部署在目标应用上的java代理程序拦截所述目标应用发送的涉及数据库连接的函数;
检测单元320,获取所拦截的函数中的sql参数,并确定所述sql参数中是否存在第一预设字符;
确定单元340,如果是,将所述函数所调用的sql语句确定为可疑sql;其中,所述可疑sql为疑似sql注入攻击的sql语句。
可选的,所述java代理程序通过如下子单元部署在目标应用上:
部署子单元,在目标应用对应的服务器的启动命令行中添加“-javaagent”命令。
可选的,所述拦截单元310中,拦截所述目标应用发送的涉及数据库连接的函数,包括:
拦截所述目标应用发送的涉及数据库连接中执行动态sql的函数;和/或,拦截所述目标应用发送的涉及数据库连接中执行预编译sql的函数。
可选的,所述执行动态sql的函数,包括以下至少一种:
java.sql.Statement子类的execute(String sql)方法
java.sql.Statement子类的executeQuery(String sql)方法
java.sql.Statement子类的executeUpdate(String sql)方法。
可选的,所述执行预编译sql的函数,包括:
java.sql.Connection子类的prepareStatement(String sql)方法。
可选的,所述装置还包括:
合并单元,将可疑sql中第一预设字符和所述第一预设字符包含的内容替换为第二预设字符,并合并相同的可疑sql语句。
可选的,所述第一预设字符包括引号,所述第二预设字符包括问号。
可选的,所述装置还包括:
处理单元,将所述可疑sql输出到审核平台,根据所述审核平台返回的审核结果对所述可疑sql进行处理。
可选的,所述审核平台基于审核规则确定所述可疑sql是否属于sql注入攻击;如果审核平台无法识别则通过可视化方式展示所述可疑sql。
可选的,所述基于审核规则确定所述可疑sql是否属于sql注入攻击,包括:
获取所述目标应用发送的http请求的入参;
比较所述可疑sql中的第一预设字符包含的内容,与Http请求的入参是否相同;
如果相同,则确定所述可疑sql属于sql注入攻击。
可选的,所述装置还包括:
筛选单元,在确定可疑sql后,将所述可疑sql与本地维护的误报sql进行比较;在任一可疑sql与误报sql相同时,将该可疑sql修改为正常sql;其中,所述误报sql为被确定为非sql注入攻击的历史可疑sql。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
在上述电子设备的实施例中,应理解,该处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application SpecificIntegrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,而前述的存储器可以是只读存储器(英文:read-only memory,缩写:ROM)、随机存取存储器(英文:random access memory,简称:RAM)、快闪存储器、硬盘或者固态硬盘。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于电子设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
Claims (13)
1.一种检测sql注入攻击的方法,其特征在于,所述方法包括:
基于部署在目标应用上的java代理程序拦截所述目标应用发送的涉及数据库连接的函数;
获取所拦截的函数中的sql参数,并确定所述sql参数中是否存在第一预设字符;
如果是,将所述函数所调用的sql语句确定为可疑sql;其中,所述可疑sql为疑似sql注入攻击的sql语句。
2.根据权利要求1所述的方法,其特征在于,所述java代理程序通过如下方式部署在目标应用上:
在目标应用对应的服务器的启动命令行中添加“-javaagent”命令。
3.根据权利要求1所述的方法,其特征在于,所述拦截所述目标应用发送的涉及数据库连接的函数,包括:
拦截所述目标应用发送的涉及数据库连接中执行动态sql的函数;和/或,拦截所述目标应用发送的涉及数据库连接中执行预编译sql的函数。
4.根据权利要求3所述的方法,其特征在于,所述执行动态sql的函数,包括以下至少一种:
java.sql.Statement子类的execute(String sql)方法
java.sql.Statement子类的executeQuery(String sql)方法
java.sql.Statement子类的executeUpdate(String sql)方法。
5.根据权利要求3所述的方法,其特征在于,所述执行预编译sql的函数,包括:
java.sql.Connection子类的prepareStatement(String sql)方法。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将可疑sql中第一预设字符和所述第一预设字符包含的内容替换为第二预设字符,并合并相同的可疑sql语句。
7.根据权利要求6所述的方法,其特征在于,所述第一预设字符包括引号,所述第二预设字符包括问号。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将所述可疑sql输出到审核平台,根据所述审核平台返回的审核结果对所述可疑sql进行处理。
9.根据权利要求8所述的方法,其特征在于,所述审核平台基于审核规则确定所述可疑sql是否属于sql注入攻击;如果审核平台无法识别则通过可视化方式展示所述可疑sql。
10.根据权利要求9所述的方法,其特征在于,所述基于审核规则确定所述可疑sql是否属于sql注入攻击,包括:
获取所述目标应用发送的http请求的入参;
比较所述可疑sql中的第一预设字符包含的内容,与Http请求的入参是否相同;
如果相同,则确定所述可疑sql属于sql注入攻击。
11.根据权利要求1或8所述的方法,其特征在于,所述方法还包括:
在确定可疑sql后,将所述可疑sql与本地维护的误报sql进行比较;其中,所述误报sql为被确定为非sql注入攻击的历史可疑sql;
在任一可疑sql与误报sql相同时,将该可疑sql修改为正常sql。
12.一种检测sql注入攻击的装置,其特征在于,所述装置包括:
拦截单元,基于部署在目标应用上的java代理程序拦截所述目标应用发送的涉及数据库连接的函数;
检测单元,获取所拦截的函数中的sql参数,并确定所述sql参数中是否存在第一预设字符;
确定单元,如果是,将所述函数所调用的sql语句确定为可疑sql;其中,所述可疑sql为疑似sql注入攻击的sql语句。
13.一种电子设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为上述权利要求1-11中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110328626.5A CN113158188A (zh) | 2021-03-26 | 2021-03-26 | 检测sql注入攻击的方法及装置、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110328626.5A CN113158188A (zh) | 2021-03-26 | 2021-03-26 | 检测sql注入攻击的方法及装置、电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113158188A true CN113158188A (zh) | 2021-07-23 |
Family
ID=76885648
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110328626.5A Pending CN113158188A (zh) | 2021-03-26 | 2021-03-26 | 检测sql注入攻击的方法及装置、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113158188A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103559444A (zh) * | 2013-11-05 | 2014-02-05 | 星云融创(北京)信息技术有限公司 | 一种sql注入检测方法及装置 |
CN103744802A (zh) * | 2013-12-20 | 2014-04-23 | 北京奇虎科技有限公司 | Sql注入攻击的识别方法及装置 |
CN106991322A (zh) * | 2016-01-21 | 2017-07-28 | 北京启明星辰信息安全技术有限公司 | 一种结构化查询语言sql注入攻击的检测方法和装置 |
CN108959926A (zh) * | 2018-06-27 | 2018-12-07 | 杭州安恒信息技术股份有限公司 | 一种sql注入攻击的检测方法 |
CN112039900A (zh) * | 2020-09-02 | 2020-12-04 | 平安科技(深圳)有限公司 | 网络安全风险检测方法、系统、计算机设备和存储介质 |
-
2021
- 2021-03-26 CN CN202110328626.5A patent/CN113158188A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103559444A (zh) * | 2013-11-05 | 2014-02-05 | 星云融创(北京)信息技术有限公司 | 一种sql注入检测方法及装置 |
CN103744802A (zh) * | 2013-12-20 | 2014-04-23 | 北京奇虎科技有限公司 | Sql注入攻击的识别方法及装置 |
CN106991322A (zh) * | 2016-01-21 | 2017-07-28 | 北京启明星辰信息安全技术有限公司 | 一种结构化查询语言sql注入攻击的检测方法和装置 |
CN108959926A (zh) * | 2018-06-27 | 2018-12-07 | 杭州安恒信息技术股份有限公司 | 一种sql注入攻击的检测方法 |
CN112039900A (zh) * | 2020-09-02 | 2020-12-04 | 平安科技(深圳)有限公司 | 网络安全风险检测方法、系统、计算机设备和存储介质 |
Non-Patent Citations (4)
Title |
---|
WILLIAM R.VAUGHN: "《Visual Basic和SQL Server编程指南 第5版》", 31 May 1999, 清华大学出版社 * |
张慧琳: "基于敏感字符的SQL注入攻击防御方法", 《计算机研究与发展》 * |
张红娟: "《数据库原理》", 31 July 2016, 西安电子科技大学出版社 * |
徐寅昊: "SQL注入及SQL Server的安全性研究", 《中国优秀硕士学位论文全文数据库》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108763928B (zh) | 一种开源软件漏洞分析方法、装置和存储介质 | |
US10628129B2 (en) | Intellectual automated security, performance and code generation framework | |
US10460106B2 (en) | Method and device for identifying computer virus variants | |
US10904286B1 (en) | Detection of phishing attacks using similarity analysis | |
Gomez et al. | A recommender system of buggy app checkers for app store moderators | |
JP6952506B2 (ja) | 検査装置 | |
CN110929264B (zh) | 漏洞检测方法、装置、电子设备及可读存储介质 | |
CN111737692B (zh) | 应用程序的风险检测方法及装置、设备、存储介质 | |
EP3028211A1 (en) | Determining malware based on signal tokens | |
CN112685735A (zh) | 用于检测异常数据的方法、设备和计算机可读存储介质 | |
Li et al. | Large-scale third-party library detection in android markets | |
CN115391230A (zh) | 一种测试脚本生成、渗透测试方法、装置、设备及介质 | |
US11868465B2 (en) | Binary image stack cookie protection | |
CN112817877B (zh) | 异常脚本检测方法、装置、计算机设备和存储介质 | |
CN116932406A (zh) | 组件检测方法、装置、终端设备以及存储介质 | |
CN111966630B (zh) | 文件类型的检测方法、装置、设备和介质 | |
Luo et al. | MAD-API: Detection, correction and explanation of API misuses in distributed android applications | |
EP4137976A1 (en) | Learning device, detection device, learning method, detection method, learning program, and detection program | |
CN110011964B (zh) | 一种网页环境检测方法和装置 | |
CN113158187B (zh) | 检测点击劫持的方法及装置、电子设备 | |
CN111240728A (zh) | 应用程序更新方法、装置、设备和存储介质 | |
CN113158188A (zh) | 检测sql注入攻击的方法及装置、电子设备 | |
CN115982713A (zh) | 漏洞修复方法、装置、电子设备和计算机可读存储介质 | |
US20230252158A1 (en) | System and method for dynamically updating existing threat models based on newly identified active threats | |
CN115310082A (zh) | 信息处理方法、装置、电子设备及存储介质 |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210723 |