CN113836020A - 代码检测方法、装置及存储介质 - Google Patents

代码检测方法、装置及存储介质 Download PDF

Info

Publication number
CN113836020A
CN113836020A CN202111121560.9A CN202111121560A CN113836020A CN 113836020 A CN113836020 A CN 113836020A CN 202111121560 A CN202111121560 A CN 202111121560A CN 113836020 A CN113836020 A CN 113836020A
Authority
CN
China
Prior art keywords
code
sequence
detected
defect
sequence pattern
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
CN202111121560.9A
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.)
China Telecom Corp Ltd
Original Assignee
China Telecom Corp 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 China Telecom Corp Ltd filed Critical China Telecom Corp Ltd
Priority to CN202111121560.9A priority Critical patent/CN113836020A/zh
Publication of CN113836020A publication Critical patent/CN113836020A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • 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/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2465Query processing support for facilitating data mining operations in structured databases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Databases & Information Systems (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例中提供代码检测方法、装置及存储介质,通过频繁序列模式挖掘方法,根据参考代码集提取代码正确序列模式,并根据所述代码正确序列模式提取安全处理序列模式;根据缺陷代码集获取代码缺陷序列模式;根据待检测代码获取待检测代码序列模式;将待检测代码序列模式与所述代码缺陷序列模式和/或安全处理序列模式匹配,以根据匹配结果判断所述待检测代码是否存在缺陷。由此,一方面,通过经数据挖掘得到精简准确的安全处理序列模式,以用于检测代码,有效降低数据量而提升检测效率;另一方面,可以通过结合安全处理序列模式和代码缺陷序列模式的双向检测,降低代码的误报概率,提升代码检测准确率。

Description

代码检测方法、装置及存储介质
技术领域
本申请涉及计算机编程技术领域,尤其涉及代码检测方法、装置及存储介质。
背景技术
目前,在进行代码静态检测时,主要是通过对待检测代码匹配污点数据或通用安全函数的方法,或者使用预设代码正确模式等来判断待检测代码是否存在缺陷。
但是,上述方式均存在不足。例如,如果待检测代码中进行了私有安全函数的处理,则会导致与通用安全函数匹配无法成功,从而容易出现误报。并且,通常只使用待检测代码匹配污点数据的方法也存在较大误报率。另外,只使用预设代码正确模式进行判断,则由于预设代码正确模式的数据量极大,导致匹配效率低;并且,违反代码正确模式的待检测代码实际并不一定存在缺陷,从而出现误报。
因此,如何找到更加准确、高效的代码检测手段,已成为业界亟待解决的技术问题。
发明消息
鉴于以上所述现有技术的缺点,本申请的目的在于提供代码检测方法、装置及存储介质,通过与正确、缺陷的模式的双向匹配方式,提升代码检测的准确性和效率。
本申请第一方面提供一种代码检测方法,包括:通过频繁序列模式挖掘方法,根据参考代码集提取代码正确序列模式,并根据所述代码正确序列模式提取安全处理序列模式;根据缺陷代码集获取代码缺陷序列模式;根据待检测代码获取待检测代码序列模式;将待检测代码序列模式与所述代码缺陷序列模式和/或安全处理序列模式匹配,以根据匹配结果判断所述待检测代码是否存在缺陷;其中,所述匹配结果指的是判断所述待检测代码序列模式是否以所述代码缺陷序列模式和/或安全处理序列模式为子集。
在第一方面的实施例中,所述代码正确序列模式、代码缺陷序列模式及待检测代码序列模式中的元素相关于各自对应代码中依序调用的函数。
在第一方面的实施例中,所述通过频繁序列模式挖掘方法,根据参考代码集提取代码正确序列模式,并根据代码正确序列模式提取安全处理序列模式,包括:根据所述参考代码集提取控制流图;对应所述控制流图中每个基本块所调用的每个函数的函数标识映射为项目,以形成对应每个基本块的调用函数序列,各所述调用函数序列形成对应所述控制流图的调用函数序列数据库;通过所述频繁序列模式挖掘方法,根据所述调用函数序列数据库获取满足第一支持度条件的各代码正确序列模式,并从各所述代码正确序列模式选取满足第二支持度条件的安全处理序列模式。
在第一方面的实施例中,所述函数标识包括函数签名。
在第一方面的实施例中,将所述函数标识映射为项目,包括:计算每个所述函数的函数标识的特征值并以所述特征值为项目;所述代码检测方法包括:将所选取的满足第二支持度条件的代码正确序列中的各特征值映射为对应函数的函数标识,以形成所述安全处理序列模式。
在第一方面的实施例中,所述频繁序列模式挖掘方法包括频繁封闭序列模式挖掘方法,所述代码正确序列模式及安全处理序列模式为封闭序列。
在第一方面的实施例中,所述根据缺陷代码集获取代码缺陷序列模式,包括:根据所述缺陷代码集提取得到第一数据流图;根据所述第一数据流图中各代码特征所调用函数的函数标识分别形成对应各所述代码特征的代码缺陷序列模式。
在第一方面的实施例中,所述获取待检测代码的待检测代码序列模式,包括:根据待检测代码提取得到第二数据流图;根据各所述第二数据流图中各调用函数的函数标识形成待检测代码序列模式。
在第一方面的实施例中,所述将待检测代码序列模式与所述代码缺陷序列模式和/或安全处理序列模式匹配,以根据匹配结果判断所述待检测代码是否存在缺陷,包括:将所述待检测代码序列模式与代码缺陷序列模式匹配;若匹配失败,则判断所述待检测代码不存在缺陷;若匹配成功,则将待检测代码序列模式与所述安全处理序列模式匹配;若匹配成功,则判断所述待检测代码不存在缺陷;若匹配失败,则判断所述待检测代码存在缺陷。
本申请第二方面提供一种代码检测装置,包括:第一代码序列模式获取模块,用于通过频繁序列模式挖掘方法,根据参考代码集提取代码正确序列模式,并根据所述代码正确序列模式提取安全处理序列模式;第二代码序列模式获取模块,用于根据缺陷代码集获取代码缺陷序列模式;第三代码序列模式获取模块,用于根据待检测代码获取待检测代码序列模式;代码序列模式匹配模块,用于将待检测代码序列模式与所述代码缺陷序列模式和/或安全处理序列模式匹配,以根据匹配结果判断所述待检测代码是否存在缺陷;其中,所述匹配结果指的是判断所述待检测代码序列模式是否以所述代码缺陷序列模式和/或安全处理序列模式为子集。
本申请第三方面提供一种计算机装置,包括:存储器及处理器;所述存储器存储有程序指令;所述处理器用于运行所述程序指令以执行如第一方面所述的代码检测方法。
本申请第四方面提供一种计算机可读存储介质,存储有程序指令,所述程序指令被运行以执行如第一方面所述的代码检测方法。
综上,本申请实施例中提供代码检测方法、装置及存储介质,通过频繁序列模式挖掘方法,根据参考代码集提取代码正确序列模式,并根据所述代码正确序列模式提取安全处理序列模式;根据缺陷代码集获取代码缺陷序列模式;根据待检测代码获取待检测代码序列模式;将待检测代码序列模式与所述代码缺陷序列模式和/或安全处理序列模式匹配,以根据匹配结果判断所述待检测代码是否存在缺陷。一方面,通过经频繁序列模式挖掘得到精简且准确的安全处理序列模式以用于检测代码,有效降低数据量而提升检测效率;另一方面,可以通过结合安全处理序列模式和代码缺陷序列模式的双向检测,降低代码的误报概率,提升代码检测准确率。
附图说明
图1展示本申请实施例中代码检测方法的流程示意图。
图2展示本申请实施例中根据参考代码集获取安全处理序列模式的流程示意图。
图3展示本申请实施例中获取代码缺陷序列模式的流程示意图。
图4展示本申请实施例中获取待检测代码序列模式的流程示意图。
图5展示本申请实施例中待检测代码与缺陷序列模式及安全处理序列模式匹配的流程示意图。
图6展示本申请实施例中代码检测装置的功能模块示意图。
图7展示本申请实施例中的计算机装置的结构示意图。
具体实施方式
以下通过特定的具体实例说明本申请的实施方式,本领域技术人员可由本申请所揭露的消息轻易地了解本申请的其他优点与功效。本申请还可以通过另外不同的具体实施方式加以实施或应用系统,本申请中的各项目细节也可以根据不同观点与应用系统,在没有背离本申请的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
下面以附图为参考,针对本申请的实施例进行详细说明,以便本申请所属技术领域的技术人员能够容易地实施。本申请可以以多种不同形态体现,并不限定于此处说明的实施例。
在本申请的表示中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的表示意指结合该实施例或示例表示的具体特征、结构、材料或者特点包括于本申请的至少一个实施例或示例中。而且,表示的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本申请中表示的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于表示目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或隐含地包括至少一个该特征。在本申请的表示中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
为了明确说明本申请,省略与说明无关的器件,对于通篇说明书中相同或类似的构成要素,赋予了相同的参照符号。
在通篇说明书中,当说某器件与另一器件“连接”时,这不仅包括“直接连接”的情形,也包括在其中间把其它元件置于其间而“间接连接”的情形。另外,当说某种器件“包括”某种构成要素时,只要没有特别相反的记载,则并非将其它构成要素排除在外,而是意味着可以还包括其它构成要素。
虽然在一些实例中术语第一、第二等在本文中用来表示各种元件,但是这些元件不应当被这些术语限制。这些术语仅用来将一个元件与另一个元件进行区分。例如,第一接口及第二接口等表示。再者,如同在本文中所使用的,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文中有相反的指示。应当进一步理解,术语“包含”、“包括”表明存在所述的特征、步骤、操作、元件、模块、项目、种类、和/或组,但不排除一个或多个其他特征、步骤、操作、元件、模块、项目、种类、和/或组的存在、出现或添加。此处使用的术语“或”和“和/或”被解释为包括性的,或意味着任一个或任何组合。因此,“A、B或C”或者“A、B和/或C”意味着“以下任一个:A;B;C;A和B;A和C;B和C;A、B和C”。仅当元件、功能、步骤或操作的组合在某些方式下内在地互相排斥时,才会出现该定义的例外。
此处使用的专业术语只用于言及特定实施例,并非意在限定本申请。此处使用的单数形态,只要语句未明确表示出与之相反的意义,那么还包括复数形态。在说明书中使用的“包括”的意义是把特定特性、区域、整数、步骤、作业、要素及/或成份具体化,并非排除其它特性、区域、整数、步骤、作业、要素及/或成份的存在或附加。
虽然未不同地定义,但包括此处使用的技术术语及科学术语,所有术语均具有与本申请所属技术领域的技术人员一般理解的意义相同的意义。普通使用的字典中定义的术语追加解释为具有与相关技术文献和当前提示的消息相符的意义,只要未进行定义,不得过度解释为理想的或非常公式性的意义。
目前,在代码静态检测中,对待检测代码通常会采用匹配污点数据或通用安全函数、或者使用预设代码正确模式等来进行缺陷检测,但是其中存在各种问题。一方面,采用通用污点数据或安全函数与待检测代码匹配,会存在较多误报,精准度较差;另一方面,使用预设代码正确模式进行缺陷检测,也存在使用数据量较大导致匹配效率低的问题。
鉴于此,本申请实施例中可以提供代码检测方法,通过票频繁模式挖掘方法进行多次挖掘以从参考代码集中提取精简的安全处理序列模式,以用于待检测代码的匹配,在维持检测的准确率的情况下有效降低数据量而提升代码检测效率;而且,可以通过结合安全处理序列模式和代码缺陷序列模式的双向检测,降低误报概率,提升代码检测准确率。
以下通过多个实施例及附图进行详细说明。
如图1所示,展示本申请实施例中代码检测方法的流程示意图。
在具体实例中,所述代码检测方法可应用于各种计算机编程语言的代码检测,例如Java、C、C++、C#、Python、HTML5、QML等。
在本实施例中,所述代码检测方法具体包括:
步骤S101:通过频繁序列模式挖掘方法,根据参考代码集提取代码正确序列模式,并根据所述代码正确序列模式提取安全处理序列模式。
在一些实施例中,所述频繁序列模式挖掘方法,根据代码中频繁出现的特征来挖掘相应的模式。所述特征可以示例性地表现为代码中依序调用的各个函数。因此,可以通过所调用函数的函数标识按调用顺序构成序列来表示代码的特征。在具体实例中,所述函数标识可以是函数签名(function signature),包括了函数名和参数个数与类型,例如执行语句为“pstmt=con.prepareStatemet(query)”,调用函数假设为“Connect.prepareStatemet()”,参数“query”类型为字符串即“String”,则其函数签名表示为“Connect.prepareStatemet(String)”。
通过频繁序列模式挖掘方法可以从参考代码集将“频繁”出现的函数标识序列提取出来。在参考代码集中代码缺陷越少的情况下,即越多正确代码的情况下,越“频繁”出现的各调用函数的函数标识序列可能越正确及安全。
在一些实施例中,所述参考代码集可以来自开源的代码库,其中可以收纳不同开发者的开源代码,其中可以包含具有私有安全函数的代码,则通过对这样的参考代码集进行频繁序列模式挖掘,则可以得到覆盖了各种私有安全函数的代码正确序列模式,进而再提取得到安全处理序列模式,从而能避免在匹配时无法匹配待检测代码中的私有安全函数的问题。
在频繁序列模式挖掘中,存在术语项目(item)、调用函数序列(item set)以及序列(sequence)。其中,项目按时间顺序发生,多个项目的集合为调用函数序列,调用函数序列又称为事件(event),事件按发生的时间顺序构成序列。因此,序列为调用函数序列依序排列的集合。频繁序列模式挖掘,即找到各个序列中符合频繁出现要求的序列,作为序列模式(sequence pattern)。所述频繁出现要求可以通过支持度的方式表示,比如最小支持度阈值N,可以通过要求序列模式在各序列中出现作为子集的次数达到N以上来筛选符合要求的序列作为序列模式。
以步骤S101中的“参考代码集->代码正确序列模式->安全处理序列模式”的挖掘过程为例,“项目”对应参考代码集中的调用函数,根据调用函数的顺序可以形成调用函数序列以及序列,进而逐步挖掘出最符合“频繁出现”要求序列模式,以认为可以作为可靠的安全处理序列模式。
在一些实施例中,为了能让获取的代码正确序列是一个封闭序列而非单独的一个项目,则可以选择频繁封闭序列模式挖掘方法(比如CloFAST等),以获得封闭序列。举例来说,{a,b,c,d,e}、{{a,b},d,e,f}都是封闭序列。
以下通过实施例具体说明安全处理序列模式的获取方式。
如图2所示,展示本申请实施例中获取安全处理序列模式的流程示意图。即步骤S101在一实施例中的具体实现流程。
图2实施例中的流程包括:
步骤S201:根据所述参考代码集提取控制流图。
所述控制流图通过控制流图(Control Flow Graph,CFG)来表示。控制流图图也称为控制流程图,是一个过程或程序的抽象表现,代表了一个程序执行过程中会遍历到的所有路径。它用图的形式表示一个过程内所有基本块(即节点)执行的可能流向,也能反映一个过程的实时执行过程。在一些实施例中,提取控制流图可以是人工提取或者通过软件工具提取,比如Soot等。
步骤S202:对应所述控制流图中每个基本块所调用的每个函数的函数标识映射为项目,以形成对应每个基本块的调用函数序列,各所述调用函数序列形成对应所述控制流图的调用函数序列数据库(Sequence Data Base,SDB)。
具体的,可以通过每个基本块的调用函数的函数标识映射为项目,以构成每个基本块对应的调用函数序列,而控制流图的各个基本块对应的调用函数序列的集合置于所述调用函数序列数据库。
步骤S203:通过所述频繁序列模式挖掘方法,根据所述调用函数序列数据库获取满足第一支持度条件的各代码正确序列模式,并从各所述代码正确序列模式选取满足第二支持度条件的安全处理序列模式。
在一些实施例中,所述第一支持度条件可以与最小支持度相关,比如最小支持度计数值。
在CloFAST方法中,首先挖掘所有封闭的频繁调用函数序列以获得大小为1的初始序列集,然后直接在此初始序列集上工作生成新序列(即代码正确序列模式),而无需挖掘额外的频繁调用函数序列。
举例来说,第一支持度条件设置成最小支持度计数值为3,表示选择至少出现三次的封闭的调用函数序列作为代码正确序列。例如:调用函数序列库表示为{<a,b,c,d,e>,<a,b,d,e,f>,<a,b,d,g>,<a,b,d>,<a,c,h>},a~h分别为项目集(比如由上述i1~i4中的项目的组合形成),则根据最小支持度计数为3,其中出现至少3次的调用函数序列为<a,b,d>,作为一个代码正确序列。
在一些实施例中,对于挖掘得到的各调用函数序列可以进行修剪(也称“剪枝”),比如修剪掉较为“不频繁”的序列,以修剪后剩余的序列为代码正确序列模式。
在一些实施例中,每个项目可以是函数标识形式直接表示。例如,所述函数标识包括函数签名,可以通过函数签名直接作为所述项目。
但是,考虑到参考代码集可能具有海量的代码量(比如开源代码库),如果直接用函数签名来作为项目,调用函数序列数据库的数据量仍然巨大,故而在另一些实施例中,每个项目可以通过函数标识的特征值来表示,以减少调用函数序列数据库的数据量。比如,通过哈希算法计算函数标识的哈希值以作为项目来构成调用函数序列。
例如下表1所示,通过一java实例来直观说明以函数标识的特征值为项目所形成的调用函数序列。
表1
Figure BDA0003277430710000081
根据上述表1,最左侧一栏为源代码,中间一栏为左侧源代码中执行语句所调用函数的函数标识,最右侧一栏为对应中间一栏中的每个函数标识的哈希值,以各哈希值为项目,则此段代码对应得到包含各项的项集为{i1,i2,i3,i4,....};以此类推,按照控制流图的基本块的顺序可以依次得到多个项集,比如{i1,i2,i3,i4},{i5,i6},{i7},{i8}等,从而可以得调用函数序列<{i1,i2,i3,i4},{i5,i6},{i7},{i8}>,可置于调用函数序列数据库中。
原理相似的,进一步可根据各代码正确序列模式的集合形成代码正确序列数据库,通过频繁序列模式挖掘方法从中根据第二支持度条件挖掘出安全处理序列模式。
在一些实施例中,所述第二支持度条件也可以与最小支持度相关,比如最少出现3次。
举例来说,如下表2,展示一实例中各代码正确序列模式的序列数据库。
表2
序列标识(SID) 代码正确序列模式
1 <{a,b,f},{d},{e},{a},{d}>
2 <{e},{a}>
3 <{e},{a,b,f},{b,d,e}>
假设第二支持度也为最小支持度计数3,则可以从表2的序列数据库中挖掘得到序列<{e},{a}>,作为安全处理序列模式。
需说明的是,在一些实施例中,由于在根据函数标识映射项目时,是通过对函数标识求哈希值以作为项目的,则代码正确序列模式可能是哈希值序列的形式。故而,为便于后续匹配,可以将从各代码正确序列模式中挖掘出来的满足第二支持度条件的代码正确序列模式中的各项目的哈希值映射回对应函数的函数标识,以形成所述安全处理序列模式。
比如,根据表1,可将挖掘的代码正确序列模式<{i1},{i2,i3},{i4},{i1}>映射成<{HttpServletRequest.getParameter(string)},{Connect.prepareStatement(String),Prep aredStatement.setString(Interger,Object)},{PreparedStatement.executeQuery()},{Htt pServletRequest.getParameter(string)}>作为安全处理序列。
步骤S102:根据缺陷代码集获取代码缺陷序列模式。
在一些实施例中,如图3所示,所述步骤S102可具体包括:
步骤S301:根据所述缺陷代码集提取得到第一数据流图。
步骤S302:根据所述第一数据流图中各代码特征所调用函数的函数标识分别形成对应各所述代码特征的代码缺陷序列模式。
其中,数据流图描述是参数输入到输出的流程,在数据流图路径中同样会存在依序调用的各个函数。所述缺陷代码集可以是已有的缺陷代码库。所述代码特征可以是某些特定的执行语句、执行语句结构、特定函数或组合等等。通过缺陷代码的代码特征来提取代码缺陷序列模式,可有效降低处理的数据量。
参考与之前实施例中相似的将函数标识映射到项目,并通过项集形成序列的原理,可以得到所述代码缺陷序列模式。
举例来说,如下表3所示,展示一具体实例中获得缺陷序列模式的原理。
表3
Figure BDA0003277430710000101
根据此缺陷代码的数据流,可以根据所调用函数的函数标识得到缺陷序列模式:<{System.getProperty(String)},{StringBuilder.append(String)},{RunTime.getRuntim e(),RunTime.exec(String)}>。
步骤S103:根据待检测代码获取待检测代码序列模式。
在一些实施例中,如图4所示,所述步骤S103可具体包括:
步骤S401:根据待检测代码提取得到第二数据流图;
步骤S402:根据各所述第二数据流图中各调用函数的函数标识形成待检测代码序列模式。
在一些实施例中,由于通常待检测代码的数据量会远小于缺陷代码库的数据量,因此可以直接根据待检测代码的调用函数来形成待检测代码序列模式,而不必如图3中的根据代码特征形成序列。当然,也可以实际需求加以变化,并非以此为限。
需说明的是,在步骤S102、S103中对缺陷代码、待检测代码获取的序列模式,其中所包含的项目可以是原始的函数标识,也可以是根据函数标识生成的特征值(例如哈希值),可以根据实际的数据量来选择实施,以尽量减少占用资源和效率为先,并非以上述实施例为限。
步骤S104:将待检测代码序列模式与所述代码缺陷序列模式和/或安全处理序列模式匹配,以根据匹配结果判断所述待检测代码是否存在缺陷。
其中,所述匹配结果指的是判断所述待检测代码序列模式是否以所述代码缺陷序列模式和/或安全处理序列模式为子集。
在具体实施例中,如果待检测代码序列模式包含安全处理序列模式,则可以认为待检测代码无缺陷;如果待检测代码序列模式未包含缺陷序列模式,则可认为待检测代码无缺陷;如果待检测代码序列模式包含了缺陷序列模式,则其可能会存在缺陷或不存在缺陷,则可以再通过匹配安全处理序列模式来辅助判断。在一些实施例中,待检测代码序列模式可以为一或多个,缺陷序列模式、安全处理序列模式均可为多个。
如图5所示,展示具体的判断逻辑流程图。其中,匹配成功指的是待检测代码序列模式以相应的序列模式为子集,匹配失败指的是待检测代码序列模式不以相应的序列模式为子集。
图5中的流程具体包括:
步骤S501:将所述待检测代码序列模式与代码缺陷序列模式匹配;若匹配失败,则得到匹配结果:所述待检测代码不存在缺陷;若匹配成功,则进入步骤S502;
步骤S502:将待检测代码序列模式与所述安全处理序列模式匹配;若匹配失败,则判断所述待检测代码存在缺陷;若匹配成功,则判断所述待检测代码不存在缺陷。
如图6所示,展示本申请实施例中的代码检测装置的模块示意图。由于所述代码检测装置的实现可以参考之前实施例中的代码检测方法,故此处不对相同技术内容作重复赘述。
所述代码检测装置600包括:
第一代码序列模式获取模块601,用于通过频繁序列模式挖掘方法,根据参考代码集提取代码正确序列模式,并根据所述代码正确序列模式提取安全处理序列模式;
第二代码序列模式获取模块602,用于根据缺陷代码集获取代码缺陷序列模式;
第三代码序列模式获取模块603,用于根据待检测代码获取待检测代码序列模式;
代码序列模式匹配模块604,用于将待检测代码序列模式与所述代码缺陷序列模式和/或安全处理序列模式匹配,以根据匹配结果判断所述待检测代码是否存在缺陷;其中,所述匹配结果指的是判断所述待检测代码序列模式是否以所述代码缺陷序列模式和/或安全处理序列模式为子集。
在一些实施例中,所述代码正确序列模式、代码缺陷序列模式及待检测代码序列模式中的元素相关于各自对应代码中依序调用的函数。
在一些实施例中,所述第一代码序列模式获取模块601,可以包括:
第一控制流图提取模块,用于根据所述参考代码集提取控制流图;
第一映射模块,用于对应所述控制流图中每个基本块所调用的每个函数的函数标识映射为项目,以形成对应每个基本块的调用函数序列,各所述调用函数序列形成对应所述控制流图的调用函数序列数据库;
序列模式挖掘模块,用于通过所述频繁序列模式挖掘方法,根据所述调用函数序列数据库获取满足第一支持度条件的各代码正确序列模式,并从各所述代码正确序列模式选取满足第二支持度条件的安全处理序列模式。
在一些实施例中,所述函数标识包括函数签名。
在一些实施例中,所述第一映射模块,用于计算每个所述函数的函数标识的特征值并以所述特征值为项目;所述代码检测装置还包括:第二映射模块,用于将所选取的满足第二支持度条件的代码正确序列中的各特征值映射为对应函数的函数标识,以形成所述安全处理序列模式。
在一些实施例中,所述频繁序列模式挖掘方法包括频繁封闭序列模式挖掘方法,所述代码正确序列模式及安全处理序列模式为封闭序列。
在一些实施例中,所述第二代码序列模式602获取模块包括:第一数据流图提取模块,用于根据所述缺陷代码集提取得到第一数据流图;第一序列形成模块,用于根据所述第一数据流图中各代码特征所调用函数的函数标识分别形成对应各所述代码特征的代码缺陷序列模式。
在一些实施例中,所述第三代码序列模式603获取模块包括:第二数据流图提取模块,用于根据待检测代码提取得到第二数据流图;第二序列形成模块,根据各所述第二数据流图中各调用函数的函数标识形成待检测代码序列模式。
在一些实施例中,序列模式挖掘模块604包括:第一匹配模块及第二匹配模块;所述第一匹配模块,用于将所述待检测代码序列模式与代码缺陷序列模式匹配;若匹配失败,则判断所述待检测代码不存在缺陷;若匹配成功,则所述第二匹配模块用于将待检测代码序列模式与所述安全处理序列模式匹配;若匹配成功,则判断所述待检测代码不存在缺陷;若匹配失败,则判断所述待检测代码存在缺陷。
需特别说明的是,在图6实施例中的各功能模块,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以程序指令产品的形式实现。程序指令产品包括一个或多个程序指令。在计算机上加载和执行程序指令指令时,全部或部分地产生按照本申请的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。程序指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输。
并且,图6实施例所揭露的装置,也可以通过其它的模块划分方式实现。以上所表示的装置实施例仅仅是示意性的,例如所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或模块可以结合或者可以动态到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接于可以是通过一些接口,装置或模块的间接耦合或通信连接于,可以是电性或其它的形式。
另外,图6实施例中的各功能模块及子模块可以动态在一个处理部件中,也可以是各模块单独物理存在,也可以两个或两个以上模块动态在一个部件中。上述动态的部件既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。上述动态的部件如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读存储介质中。该存储介质可以是只读存储器,磁盘或光盘等。
如图7所示,展示本申请实施例中计算机装置的电路结构示意图。
所述计算机装置可以实现于例如台式机、笔记本电脑、智能手机、平板电脑等。
所述计算机装置700包括:总线701、处理器702及存储器703。处理器702、存储器703之间可以通过总线701通信。所述存储器703中可以存储有程序指令(比如系统或应用软件),存储器703还可以存储有供程序指令读写的数据。所述处理器702通过运行存储器703中的程序指令来执行前述实施例中的代码检测方法。
总线701可以是外设部件互连标准(Peripheral Component Interconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,虽然图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
在一些实施例中,处理器702可以为中央处理器(Central Processing Unit,CPU)、微处理单元(MCU)、片上系统(System On Chip)、或现场可编程逻辑阵列(FPGA)等实现。存储器703可以包括易失性存储器(Volatile Memory)以用于运行程序时的数据暂存使用,例如随机存取存储器(Random Access Memory,RAM)。
存储器703还可以包括非易失性存储器(non-volatile memory)以用于数据存储,例如只读存储器(Read-Only Memory,ROM),快闪存储器,硬盘驱动器(Hard Disk Drive,HDD)或固态盘(Solid-State Disk,SSD)。
可选的,所述计算机装置还可以包括通信器704。所述通信器704用于与外部通信。在具体实例中,所述通信器704可以包括一个或多个有线和/或无线通信电路模块。举例来说,所述通信器704可以包括例如有线网卡、USB模块、串行接口模块等中的一种或多种。无线通信模块所遵循的无线通信协议包括:例如近距离无线通信(Nearfieldcommunication,NFC)技术、红外(Infared,IR)技术、全球移动通讯系统(Global Systemfor Mobile communications,GSM)、通用分组无线服务(General Packet Radio Service,GPRS)、码分多址引入(Code Division MultipleAccess,CDMA)、宽带码分多址(WidebandCode division multiple access,WCDMA)、时分码分多址(Time-Division Code DivisionMultiple Access,TD-SCDMA)、长期演进(Long Term Evolution,LTE)、蓝牙(BlueTooth,BT)、全球导航卫星系统(Global Navigation Satellite System,GNSS)等中的一种或多种。
本申请实施例中还可以提供一种计算机可读存储介质,存储有程序指令,所述程序指令被运行时执行之前各实施例(例如图1~图5)的流程中的方法步骤。
上述实施例中的方法步骤被实现为可存储在记录介质(诸如CD ROM、RAM、软盘、硬盘或磁光盘)中的软件或计算机代码,或者被实现通过网络下载的原始存储在远程记录介质或非暂时机器可读介质中并将被存储在本地记录介质中的计算机代码,从而在此表示的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件(诸如ASIC或FPGA)的记录介质上的这样的软件处理。
需特别说明的是,本申请上述实施例的流程图表示的流程或方法表示可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分。并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能。
例如,图1~图5实施例中的各步骤的顺序可能可以在具体场景中加以变化,并非以上述表示为限。
综上,本申请实施例中提供端口连接控制方法、管理方法、装置及存储介质,客户端在与所述服务端之间的无流量交互状态达到第一预设时长,则向服务端发送认证信息包作为心跳数据包;其中,所述心跳数据包包含用于设置所述端口的开放时长的时间控制信息。故而,一方面可以利用认证信息包携带的认证信息来提升网络安全性,另一方面可以根据所述时间控制信息来对应设置所述端口的开放时长以控制网络资源消耗,从而可以实现长连接下的持续认证,解决现有技术的问题。
上述实施例仅例示性说明本申请的原理及其功效,而非用于限制本申请。任何熟悉此技术的人士皆可在不违背本申请的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本申请所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本申请的权利要求所涵盖。

Claims (12)

1.一种代码检测方法,其特征在于,包括:
通过频繁序列模式挖掘方法,根据参考代码集提取代码正确序列模式,并根据所述代码正确序列模式提取安全处理序列模式;
根据缺陷代码集获取代码缺陷序列模式;
根据待检测代码获取待检测代码序列模式;
将待检测代码序列模式与所述代码缺陷序列模式和/或安全处理序列模式匹配,以根据匹配结果判断所述待检测代码是否存在缺陷;其中,所述匹配结果指的是判断所述待检测代码序列模式是否以所述代码缺陷序列模式和/或安全处理序列模式为子集。
2.根据权利要求1所述的代码检测方法,其特征在于,所述代码正确序列模式、代码缺陷序列模式及待检测代码序列模式中的元素相关于各自对应代码中依序调用的函数。
3.根据权利要求1所述的代码检测方法,其特征在于,所述通过频繁序列模式挖掘方法,根据参考代码集提取代码正确序列模式,并根据代码正确序列模式提取安全处理序列模式,包括:
根据所述参考代码集提取控制流图;
对应所述控制流图中每个基本块所调用的每个函数的函数标识映射为项目,以形成对应每个基本块的调用函数序列,各所述调用函数序列形成对应所述控制流图的调用函数序列数据库;
通过所述频繁序列模式挖掘方法,根据所述调用函数序列数据库获取满足第一支持度条件的各代码正确序列模式,并从各所述代码正确序列模式选取满足第二支持度条件的安全处理序列模式。
4.根据权利要求3所述的代码检测方法,其特征在于,所述函数标识包括函数签名。
5.根据权利要求3所述的代码检测方法,其特征在于,将所述函数标识映射为项目,包括:计算每个所述函数的函数标识的特征值并以所述特征值为项目;
所述代码检测方法包括:
将所选取的满足第二支持度条件的代码正确序列中的各特征值映射为对应函数的函数标识,以形成所述安全处理序列模式。
6.根据权利要求2所述的代码检测方法,其特征在于,所述频繁序列模式挖掘方法包括频繁封闭序列模式挖掘方法,所述代码正确序列模式及安全处理序列模式为封闭序列。
7.根据权利要求1所述的代码检测方法,其特征在于,所述根据缺陷代码集获取代码缺陷序列模式,包括:
根据所述缺陷代码集提取得到第一数据流图;
根据所述第一数据流图中各代码特征所调用函数的函数标识分别形成对应各所述代码特征的代码缺陷序列模式。
8.根据权利要求7所述的代码检测方法,其特征在于,所述获取待检测代码的待检测代码序列模式,包括:
根据待检测代码提取得到第二数据流图;
根据各所述第二数据流图中各调用函数的函数标识形成待检测代码序列模式。
9.根据权利要求1或7所述的代码检测方法,其特征在于,所述将待检测代码序列模式与所述代码缺陷序列模式和/或安全处理序列模式匹配,以根据匹配结果判断所述待检测代码是否存在缺陷,包括:
将所述待检测代码序列模式与代码缺陷序列模式匹配;
若匹配失败,则判断所述待检测代码不存在缺陷;
若匹配成功,则将待检测代码序列模式与所述安全处理序列模式匹配;若匹配成功,则判断所述待检测代码不存在缺陷;若匹配失败,则判断所述待检测代码存在缺陷。
10.一种代码检测装置,其特征在于,包括:
第一代码序列模式获取模块,用于通过频繁序列模式挖掘方法,根据参考代码集提取代码正确序列模式,并根据所述代码正确序列模式提取安全处理序列模式;
第二代码序列模式获取模块,用于根据缺陷代码集获取代码缺陷序列模式;
第三代码序列模式获取模块,用于根据待检测代码获取待检测代码序列模式;
代码序列模式匹配模块,用于将待检测代码序列模式与所述代码缺陷序列模式和/或安全处理序列模式匹配,以根据匹配结果判断所述待检测代码是否存在缺陷;其中,所述匹配结果指的是判断所述待检测代码序列模式是否以所述代码缺陷序列模式和/或安全处理序列模式为子集。
11.一种计算机装置,其特征在于,包括:存储器及处理器;所述存储器存储有程序指令;所述处理器用于运行所述程序指令以执行如权利要求1至9中任一项目所述的代码检测方法。
12.一种计算机可读存储介质,其特征在于,存储有程序指令,所述程序指令被运行以执行如权利要求1至9中任一项目所述的代码检测方法。
CN202111121560.9A 2021-09-24 2021-09-24 代码检测方法、装置及存储介质 Pending CN113836020A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111121560.9A CN113836020A (zh) 2021-09-24 2021-09-24 代码检测方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111121560.9A CN113836020A (zh) 2021-09-24 2021-09-24 代码检测方法、装置及存储介质

Publications (1)

Publication Number Publication Date
CN113836020A true CN113836020A (zh) 2021-12-24

Family

ID=78969818

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111121560.9A Pending CN113836020A (zh) 2021-09-24 2021-09-24 代码检测方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN113836020A (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4905295A (en) * 1986-11-13 1990-02-27 Ricoh Company, Ltd. Code sequence matching method and apparatus
CN101308473A (zh) * 2008-06-27 2008-11-19 浙江大学 一种基于序列模式挖掘的程序级操作系统调试方法
CN103038777A (zh) * 2010-06-03 2013-04-10 诺基亚公司 用于分析及检测恶意软件的方法和装置
CN103914374A (zh) * 2012-12-31 2014-07-09 梁彬 基于程序切片和频繁模式提取的代码缺陷检测方法及装置
CN104699611A (zh) * 2015-03-18 2015-06-10 北京航空航天大学 一种基于开源软件缺陷代码修改模式的缺陷信息提取方法
CN107967208A (zh) * 2016-10-20 2018-04-27 南京大学 一种基于深度神经网络的Python资源敏感缺陷代码检测方法
CN108446213A (zh) * 2017-02-15 2018-08-24 西门子公司 一种静态代码质量分析方法和装置
US20190087179A1 (en) * 2017-09-15 2019-03-21 Cognizant Technology Solutions India Pvt. Ltd. System and method for predicting defects in a computer program
US20210124830A1 (en) * 2019-10-29 2021-04-29 Dell Products L.P. Code vulnerability remediation

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4905295A (en) * 1986-11-13 1990-02-27 Ricoh Company, Ltd. Code sequence matching method and apparatus
CN101308473A (zh) * 2008-06-27 2008-11-19 浙江大学 一种基于序列模式挖掘的程序级操作系统调试方法
CN103038777A (zh) * 2010-06-03 2013-04-10 诺基亚公司 用于分析及检测恶意软件的方法和装置
CN103914374A (zh) * 2012-12-31 2014-07-09 梁彬 基于程序切片和频繁模式提取的代码缺陷检测方法及装置
CN104699611A (zh) * 2015-03-18 2015-06-10 北京航空航天大学 一种基于开源软件缺陷代码修改模式的缺陷信息提取方法
CN107967208A (zh) * 2016-10-20 2018-04-27 南京大学 一种基于深度神经网络的Python资源敏感缺陷代码检测方法
CN108446213A (zh) * 2017-02-15 2018-08-24 西门子公司 一种静态代码质量分析方法和装置
US20190087179A1 (en) * 2017-09-15 2019-03-21 Cognizant Technology Solutions India Pvt. Ltd. System and method for predicting defects in a computer program
US20210124830A1 (en) * 2019-10-29 2021-04-29 Dell Products L.P. Code vulnerability remediation

Similar Documents

Publication Publication Date Title
CN110209652B (zh) 数据表迁移方法、装置、计算机设备和存储介质
CN109474578B (zh) 报文消息校验方法、装置、计算机设备和存储介质
CN108427613B (zh) 异常接口定位方法、装置、计算机设备和存储介质
US9009175B2 (en) System and method for database migration and validation
WO2015131804A1 (en) Call stack relationship acquiring method and apparatus
CN111124872A (zh) 基于差异代码分析的分支检测方法、装置及存储介质
WO2021120628A1 (zh) 基于区块链的敏感词检测方法、装置、计算机设备和计算机可读存储介质
US20170277887A1 (en) Information processing apparatus, information processing method, and computer readable medium
CN113220588A (zh) 一种数据处理的自动化测试方法、装置、设备及存储介质
CN112363937A (zh) 差异覆盖率测试方法、装置、计算机设备和存储介质
CN113282799A (zh) 节点的操作方法、装置、计算机设备和存储介质
CN113836020A (zh) 代码检测方法、装置及存储介质
CN114816772B (zh) 基于兼容层运行的应用的排错方法、排错系统及计算设备
CN115987865B (zh) 一种路由代码生成方法、装置、矩阵检测方法及储存介质
CN108763053B (zh) 埋点名称的生成方法及终端设备
CN113778834B (zh) 一种应用软件的系统性能测试方法、装置与计算设备
CN108563578A (zh) Sdk兼容性检测方法、装置、设备及可读存储介质
CN106326310B (zh) 一种手机客户端软件的资源加密更新方法
CN114138330A (zh) 基于知识图谱的代码克隆检测优化方法、装置和电子设备
CN113918384A (zh) 数据保存方法、装置、设备及存储介质
CN112433943A (zh) 基于抽象语法树的环境变量检测方法、装置、设备及介质
CN113792326B (zh) 一种文件内容限制复制的方法及装置
CN112165406B (zh) 接口报文测试方法、装置、计算机设备和存储介质
CN104679741B (zh) 一种获取实例占用内存的方法及装置
US11567684B1 (en) Constant time updates after memory deduplication

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