基于抽象语法树的防数据越权方法、装置及存储介质与流程

文档序号:20948016发布日期:2020-06-02 19:58阅读:206来源:国知局
基于抽象语法树的防数据越权方法、装置及存储介质与流程

本发明涉及数据库访问技术领域,尤其是一种基于抽象语法树的防数据越权方法、装置及存储介质。



背景技术:

在业务系统开发过程中通常需要保证用户操作自己的数据,但是由于黑客攻击以及盗号等现象的存在,经常会出现通过拦截用户信息等手段访问其他人数据的情况,出现这种情况的大部分原因是操作数据库过程中没有加上相关条件限制,比如用户的id或者租户编号等。

目前有些业务系统在部分数据库访问层面添加了相关的查询检查操作,但是需要对每个访问请求分别做出相应的判断,例如业务系统在访问数据库层面,针对每一个查询语句添加用户身份的校验,以判断用户访问信息是否为空或用户访问信息和所操作资源是否匹配,访问信息为空或者不匹配则返回相关错误或者异常。这不仅容易造成大量代码重复,增加人为检测负担和压力,而且重复校验逻辑过多很可能造成代码的遗漏。此外,该方式需要针对不同的数据库方言和语法开发不同的检测逻辑,无法快速、便捷地进行数据库的数据库切换使用。



技术实现要素:

有鉴于此,本发明实施例提供了一种基于抽象语法树的防数据越权方法、装置及存储介质,能够达到在减少重复的校验逻辑、有效屏蔽不同数据库差异性的基础上提高数据库访问的安全性的目的。

根据本发明实施例的一方面,提供了一种基于抽象语法树的防数据越权方法,包括:

若监测到来自服务器的查询语句即将查询数据库,基于预定义的抽象语法树解析所述查询语句得到语句资源和查询条件,其中所述语句资源中包含关键字段;

基于所述语句资源中的关键字段分析所述语句资源是否满足所述查询条件;

若所述语句资源不满足所述查询条件,阻止所述查询语句查询数据库并针对所述查询语句发出预警消息。

可选地,所述关键字段包括用户id、身份证号、手机号码、账户名称、账户密码、邮箱中的至少一项。

可选地,所述查询条件包括所述语句资源中的关键字段包含指定的关键字段,基于所述语句资源中的关键字段分析所述语句资源是否满足所述查询条件,包括:

分析所述语句资源中的关键字段是否包含指定的关键字段;

其中,若所述语句资源中的关键字段不包含指定的关键字段,所述语句资源不满足所述查询条件。

可选地,所述查询条件包括所述语句资源中关键字段的字段内容属于预设字段内容,基于所述语句资源中的关键字段分析所述语句资源是否满足所述查询条件,包括:

分析所述语句资源中关键字段的字段内容是否属于预设字段内容;

其中,若所述语句资源中的关键字段的字段内容不属于预设字段内容,所述语句资源不满足所述查询条件。

可选地,若所述语句资源不满足所述查询条件,阻止所述查询语句查询数据库并针对所述查询语句发出预警消息之后,还包括:

将不满足所述查询条件的查询语句记录至预设的黑名单中。

可选地,监测到来自服务器的查询语句即将查询数据库之后,还包括:

判断来自服务器的查询语句是否存在于所述黑名单中;

若来自服务器的查询语句存在于所述黑名单中,阻止所述查询语句查询数据库并针对所述查询语句发出预警消息。

可选地,将不满足所述查询条件的查询语句记录至预设的黑名单中之后,还包括:

获取所述黑名单中各查询语句的来源信息;

统计不同来源信息分别对应的黑名单中查询语句的数量,将对应有超过预设数量的黑名单中查询语句的来源信息记录至所述黑名单中。

可选地,监测到来自服务器的查询语句即将查询数据库之后,还包括:

获取来自服务器的查询语句的来源信息;

判断来自服务器的查询语句的来源信息是否存在于所述黑名单中;

若所述来源信息存在于所述黑名单中,阻止所述查询语句查询数据库并针对所述查询语句发出预警消息。

可选地,基于所述语句资源中的关键字段分析所述语句资源是否满足所述查询条件之后,还包括:

若所述语句资源满足所述查询条件,利用所述查询语句在所述数据库中查询相应的数据。

可选地,所述数据库包括:oracle数据库、sqlserver数据库、mysql数据库中的任意一项。

根据本发明实施例的另一方面,还提高了一种基于抽象语法树的防数据越权装置,其特征在于,包括:

解析模块,适于若监测到来自服务器的查询语句即将查询数据库,基于预定义的抽象语法树解析所述查询语句得到语句资源和查询条件,其中所述语句资源中包含关键字段;

分析模块,适于基于所述语句资源中的关键字段分析所述语句资源是否满足所述查询条件;

预警模块,适于若所述语句资源不满足所述查询条件,阻止所述查询语句查询数据库并针对所述查询语句发出预警消息。

可选地,所述关键字段包括用户id、身份证号、手机号码、账户名称、账户密码、邮箱中的至少一项。

可选地,所述查询条件包括所述语句资源中的关键字段包含指定的关键字段,所述分析模块还适于:

分析所述语句资源中的关键字段是否包含指定的关键字段;

其中,若所述语句资源中的关键字段不包含指定的关键字段,所述语句资源不满足所述查询条件。

可选地,所述查询条件包括所述语句资源中关键字段的字段内容属于预设字段内容,所述分析模块还适于:

分析所述语句资源中关键字段的字段内容是否属于预设字段内容;

其中,若所述语句资源中的关键字段的字段内容不属于预设字段内容,所述语句资源不满足所述查询条件。

可选地,所述装置还包括:

记录模块,适于将不满足所述查询条件的查询语句记录至预设的黑名单中。

可选地,所述装置还包括:

第一判断模块,适于判断来自服务器的查询语句是否存在于所述黑名单中;

所述预警模块,还适于若来自服务器的查询语句存在于所述黑名单中,阻止所述查询语句查询数据库并针对所述查询语句发出预警消息。

可选地,所述装置还包括:

第一获取模块,适于获取所述黑名单中各查询语句的来源信息;

所述记录模块,还适于统计不同来源信息分别对应的黑名单中查询语句的数量,将对应有超过预设数量的黑名单中查询语句的来源信息记录至所述黑名单中。

可选地,所述装置还包括:

第二获取模块,适于获取来自服务器的查询语句的来源信息;

第二判断模块,适于判断来自服务器的查询语句的来源信息是否存在于所述黑名单中;

所述预警模块,还适于若所述来源信息存在于所述黑名单中,阻止所述查询语句查询数据库并针对所述查询语句发出预警消息。

可选地,所述装置还包括:

查询模块,适于若所述语句资源满足所述查询条件,利用所述查询语句在所述数据库中查询相应的数据。

可选地,所述数据库包括:oracle数据库、sqlserver数据库、mysql数据库中的任意一项。

根据本发明实施例的再一方面,还提供了一种计算机可读存储介质,存储有计算机程序代码,当所述计算机程序代码在计算设备上运行时,导致所述计算设备执行上文任意实施例所述的基于抽象语法树的防数据越权方法。

根据本发明实施例的又一方面,还提供了一种计算设备,包括:处理器;存储有计算机程序代码的存储器;当所述计算机程序代码被所述处理器运行时,导致所述计算设备执行上文任意实施例所述的基于抽象语法树的防数据越权方法。

本发明实施例通过预定义的抽象语法树对所述查询语句进行解析,从而可以利用解析到的查询条件来检验语句资源是否符合查询条件,无需针对每个查询语句分别设置对应的校验条件,有效避免了重复的校验逻辑。由于本发明实施例是在查询语句即将查询数据库时利用查询条件来检验语句资源,因此可以无需对数据库进行调整,能够适用于多种数据库,有效地屏蔽不同数据库的差异性。进一步地,本发明实施例在语句资源不满足所述查询条件时阻止所述查询语句查询数据库并针对所述查询语句发出预警消息,不仅可以有效地防止不合条件的查询语句查询数据库,提高了数据库访问的安全性,而且能够对不合条件的查询语句进行及时的预警。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。

附图说明

构成说明书的一部分的附图描述了本发明的实施例,并且连同描述一起用于解释本发明的原理。

参照附图,根据下面的详细描述,可以更加清楚地理解本发明,其中:

图1示出了本发明一实施例的基于抽象语法树的防数据越权方法的流程

图2示出了本发明另一实施例的基于抽象语法树的防数据越权方法的流程示意图;

图3示出了本发明一实施例的基于抽象语法树的防数据越权装置的结构示意图;

图4示出了本发明另一实施例的基于抽象语法树的防数据越权装置的结构示意图。

具体实施方式

现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。

同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

本发明实施例可以应用于计算机系统/服务器,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与计算机系统/服务器一起使用的众所周知的计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。

计算机系统/服务器可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。

为解决上述技术问题,本发明实施例提供了一种基于抽象语法树的防数据越权方法,图1示出了本发明一实施例的基于抽象语法树的防数据越权方法的流程示意图,参见图1,该方法可以包括以下步骤s102至步骤s106。

步骤s102,若监测到来自服务器的查询语句即将查询数据库,基于预定义的抽象语法树(abstractsyntaxtree,ast)解析查询语句得到语句资源和查询条件,其中语句资源中包含关键字段。

步骤s104,基于语句资源中的关键字段分析语句资源是否满足查询条件。

步骤s106,若语句资源不满足查询条件,阻止查询语句查询数据库并针对查询语句发出预警消息。

本发明实施例通过预定义的抽象语法树对查询语句进行解析,从而可以利用解析到的查询条件来检验语句资源是否符合查询条件,无需针对每个查询语句分别设置对应的校验条件,有效避免了重复的校验逻辑。由于本发明实施例是在查询语句即将查询数据库时利用查询条件来检验语句资源,因此可以无需对数据库进行调整,能够适用于多种数据库,有效地屏蔽不同数据库的差异性。进一步地,本发明实施例在语句资源不满足查询条件时阻止查询语句查询数据库并针对查询语句发出预警消息,不仅可以有效地防止不合条件的查询语句查询数据库,提高了数据库访问的安全性,而且能够对不合条件的查询语句进行及时的预警。

通常客户端向服务器请求数据时直接向后端服务器发送请求,如客户端向服务器发送url(uniformresourcelocator,统一资源定位符)请求,然后,服务器会根据接收到的请求向相应的数据库发送查询语句sql(structuredquerylanguage,结构化查询语言)。本发明实施例通过对服务器准备向相应的数据库发送查询语句的过程进行监测,即监测来自服务器的查询语句是否即将查询数据库,并在监测到查询语句即将查询数据库后基于抽象语法树解析查询语句,进而根据解析结果来阻止不合规的查询语句查询数据库。

参见上文步骤s102,若监测到来自服务器的查询语句即将查询数据库,可以基于预定义的抽象语法树解析查询语句得到语句资源和查询条件,这里的语句资源中包含关键字段。在本发明一实施例中,语句资源中的关键字段可以包括用户id、身份证号、手机号码、账户名称、账户密码、邮箱等等中的至少一项,本发明实施例对关键字段不作具体的限定。另外,本发明实施例中的数据库可以是关系型数据库管理系统,如oracle数据库、sqlserver数据库、mysql数据库、db2数据库,当然还可以是其他数据库,本发明实施例对此不作具体的限定。

在该实施例中,对来自服务器的查询语句进行监测之前可以对抽象语法树进行预定义,预定义时可以根据实际的业务需求对查询条件进行相应的配置。

在本发明一可选实施例中,查询条件可以是语句资源中的关键字段包含指定的关键字段,这里指定的关键字段可以是一个,也可以是多个,本发明实施例对指定的关键字段的数量不作具体的限定。在执行上文步骤s104基于语句资源中的关键字段分析语句资源是否满足查询条件时,具体可以分析语句资源中的关键字段是否包含指定的关键字段。如果语句资源中的关键字段不包含指定的关键字段,可以确定语句资源不满足查询条件。

例如,指定的关键字段为用户id,假设从查询语句中解释得到的语句资源中的关键字段包含身份证号和手机号码,通过分析查询语句的语句资源得知,语句资源中没有包含用户id,由此,可以确定语句资源不满足查询条件。

在本发明另一可选实施例中,查询条件可以是语句资源中关键字段的字段内容属于预设字段内容,在执行上文步骤s104基于语句资源中的关键字段分析语句资源是否满足查询条件时,具体可以分析语句资源中关键字段的字段内容是否属于预设字段内容。如果语句资源中的关键字段的字段内容不属于预设字段内容,可以确定语句资源不满足查询条件。

例如,预设字段内容为用户id位于10000到21000之间,假设从查询语句中解释得到的语句资源中的关键字段中用户id为22222,通过分析查询语句的语句资源得知,语句资源中的用户id未在用户id号10000到21000之间,由此,可以确定语句资源不满足查询条件。

在本发明一实施例中,若语句资源不满足查询条件,在阻止查询语句查询数据库并针对查询语句发出预警消息之后,还可以将不满足查询条件的查询语句记录至预设的黑名单中。当再次监测到来自服务器的查询语句即将查询数据库之后,可以先判断来自服务器的查询语句是否存在于黑名单中,若来自服务器的查询语句存在于黑名单中,则可以直接阻止查询语句查询数据库,并针对查询语句发出预警消息。当从黑名单中查找到查询语句时,可以无需再利用抽象语法树对查询语句进行解析,提高了分析查询语句是否符合查询条件的效率,进一步提高了防数据越权的效率。

结合上文实施例,在本发明另一实施例中,若多个不满足查询条件的查询语句属于同一来源信息,那么相应的来源可能存在问题。因此,在将不满足查询条件的查询语句记录至预设的黑名单中之后,还可以获取黑名单中各查询语句的来源信息,然后统计不同来源信息分别对应的黑名单中查询语句的数量,如果存在来源信息对应于黑名单中超过预设数量的查询语句,那么可以将该来源信息记录至黑名单中。

该实施例的来源信息可以是ip地址,也可以是其他信息。例如,预设数量为5,通过统计黑名单中的查询语句得知,黑名单中存在6个不满足查询条件的查询语句属于第一ip地址,存在另外7个不满足查询条件的查询语句属于第二ip地址,那么可以将第一ip地址和第二ip地址记录至黑名单中。

进而,当再次监测到来自服务器的查询语句即将查询数据库之后,通过获取来自服务器的查询语句的来源信息,并判断来自服务器的查询语句的来源信息是否存在于黑名单中,以在判断得知来源信息存在于黑名单时,直接阻止该来源信息的查询语句查询数据库并针对查询语句发出预警消息,无需再基于预定义的抽象语法树解析查询语句得到语句资源和查询条件,也无需基于语句资源中的关键字段分析语句资源是否满足查询条件。

在本发明一实施例中,若在步骤s104基于语句资源中的关键字段分析语句资源是否满足查询条件之后得知语句资源满足查询条件,那么查询语句可以按照正常的查询流程在数据库中查询相应的数据。

为了更加清楚的体现上述实施例内容,现提供了基于抽象语法树的防数据越权方法的具体执行过程的实施例。该实施例中,假设黑名单中已经记录了一些不符合查询条件的查询语句和相应的来源信息,参见图2,基于抽象语法树的防数据越权方法可以包括以下步骤s202至步骤s214。

步骤s202,若监测到来自服务器的查询语句即将查询数据库,判断来自服务器的查询语句是否存在于黑名单中。若否,执行步骤s204。若是,执行步骤s206,阻止查询语句查询数据库并针对查询语句发出预警消息。

步骤s204,获取来自服务器的查询语句的来源信息。

步骤s208,判断来自服务器的查询语句的来源信息是否存在于黑名单中。若否,执行步骤s210。若是,执行步骤s206。

步骤s210,基于预定义的抽象语法树解析查询语句得到语句资源和查询条件,其中语句资源中包含关键字段。

在该步骤中,基于预定义的抽象语法树还可以从查询语句中解析得到查询语句类型,查询语句的类型包含增加、修改、查询、删除等等。此外,语句资源除了包含关键字段,还会包含了数据库访问表,数据库访问表中记录了查询语句访问数据库的相关信息。

步骤s212,基于语句资源中的关键字段分析语句资源是否满足查询条件。若是,执行步骤s214。若否,执行步骤s206。

步骤s214,利用查询语句在数据库中查询相应的数据。

在该步骤中,当通过分析得知语句资源满足查询条件,那么按照正常的查询流程通过查询语句利用上述解释到的查询语句的类型、数据库访问表等信息在数据库中查询相应的数据。

本发明实施例的基于抽象语法树的防数据越权的方案可以通过插件形式嵌入到数据库访问组件之前,做到数据库访问层的零代码侵入。这里插件可以通过基于持久层框架mybatis的拦截器interceptor实现。例如,在一可选实施例中基于持久层框架mybatis的拦截器interceptor代码实现过程如下。

基于上述实施例内容,配置完成后的拦截器判断得知查询语句sql不满足查询条件,查询语句中没有包含指定的关键字段user_id。

基于同一发明构思,本发明实施例还提供了一种基于抽象语法树的防数据越权装置,图3示出了本发明一实施例的基于抽象语法树的防数据越权装置的结构示意图。参见图3,基于抽象语法树的防数据越权装置可以包括解析模块310、分析模块320以及预警模块330,具体的:

解析模块310,适于若监测到来自服务器的查询语句即将查询数据库,基于预定义的抽象语法树解析查询语句得到语句资源和查询条件,其中语句资源中包含关键字段;

分析模块320,适于基于语句资源中的关键字段分析语句资源是否满足查询条件;

预警模块330,适于若语句资源不满足查询条件,阻止查询语句查询数据库并针对查询语句发出预警消息。

在本发明的可选实施例中,关键字段包括用户id、身份证号、手机号码、账户名称、账户密码、邮箱中的至少一项。

在本发明的可选实施例中,查询条件包括语句资源中的关键字段包含指定的关键字段,分析模块320还适于,分析语句资源中的关键字段是否包含指定的关键字段。其中,若语句资源中的关键字段不包含指定的关键字段,语句资源不满足查询条件。

在本发明的可选实施例中,查询条件包括语句资源中关键字段的字段内容属于预设字段内容,分析模块320还适于,分析语句资源中关键字段的字段内容是否属于预设字段内容。其中,若语句资源中的关键字段的字段内容不属于预设字段内容,语句资源不满足查询条件。

参见图4,在本发明的可选实施例中,上文图3中的基于抽象语法树的防数据越权装置还包括记录模块340。记录模块340适于将不满足查询条件的查询语句记录至预设的黑名单中。

继续参见图4,在本发明的可选实施例中,上文图3中的基于抽象语法树的防数据越权装置还包括第一判断模块350、第一获取模块360、第二获取模块370、第二判断模块380。

第一判断模块350适于判断来自服务器的查询语句是否存在于黑名单中。预警模块330,还适于若来自服务器的查询语句存在于黑名单中,阻止查询语句查询数据库并针对查询语句发出预警消息。

第一获取模块360适于获取黑名单中各查询语句的来源信息。记录模块340还适于统计不同来源信息分别对应的黑名单中查询语句的数量,将对应有超过预设数量的黑名单中查询语句的来源信息记录至黑名单中。

第二获取模块370适于获取来自服务器的查询语句的来源信息。第二判断模块380适于判断来自服务器的查询语句的来源信息是否存在于黑名单中。预警模块330还适于若来源信息存在于黑名单中,阻止查询语句查询数据库并针对查询语句发出预警消息。

继续参见图4,在本发明的可选实施例中,上文图3中的基于抽象语法树的防数据越权装置还包括查询模块390。查询模块390适于若语句资源满足查询条件,利用查询语句在数据库中查询相应的数据。

在本发明的可选实施例中,数据库可以包括oracle数据库、sqlserver数据库、mysql数据库中的任意一项。

基于同一发明构思,本发明实施例还提供了一种计算机可读存储介质,存储有计算机程序代码,当计算机程序代码在计算设备上运行时,导致计算设备执行上文任意实施例中的基于抽象语法树的防数据越权方法。

基于同一发明构思,本发明实施例还提供了一种计算设备,包括处理器;存储有计算机程序代码的存储器;当计算机程序代码被处理器运行时,导致计算设备执行上文任意实施例中的基于抽象语法树的防数据越权方法。

本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

可能以许多方式来实现本发明的方法和系统。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本发明的方法和系统。用于所述方法的步骤的上述顺序仅是为了进行说明,本发明的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本发明实施为记录在记录介质中的程序,这些程序包括用于实现根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于执行根据本发明的方法的程序的记录介质。

本发明的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本发明限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本发明的原理和实际应用,并且使本领域的普通技术人员能够理解本发明从而设计适于特定用途的带有各种修改的各种实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1