CN116361793A - 代码检测方法、装置、电子设备及存储介质 - Google Patents
代码检测方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN116361793A CN116361793A CN202310244794.5A CN202310244794A CN116361793A CN 116361793 A CN116361793 A CN 116361793A CN 202310244794 A CN202310244794 A CN 202310244794A CN 116361793 A CN116361793 A CN 116361793A
- Authority
- CN
- China
- Prior art keywords
- node
- code
- information
- detected
- link
- 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
- 238000001514 detection method Methods 0.000 title claims abstract description 163
- 238000000034 method Methods 0.000 claims abstract description 37
- 238000012795 verification Methods 0.000 claims description 19
- 238000011161 development Methods 0.000 claims description 16
- 238000004891 communication Methods 0.000 description 8
- 238000012360 testing method Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 239000000284 extract Substances 0.000 description 4
- 230000006835 compression Effects 0.000 description 3
- 238000007906 compression Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012954 risk control Methods 0.000 description 1
- 238000000926 separation method Methods 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明实施例涉及网络安全技术领域,公开了一种代码检测方法、装置、电子设备及存储介质,该方法包括:获取待检测代码;生成所述待检测代码的抽象语法树;将所述抽象语法树中各节点的节点信息与预设检测信息进行匹配,生成所述待检测代码的检测结果;其中,所述节点信息包括节点类型、节点名称和节点属性值中的至少一项,所述预设检测信息包括风险节点类型、风险节点名称以及风险节点属性值中的至少一项。应用本发明的技术方案,能够提高代码的安全性。
Description
技术领域
本发明实施例涉及网络安全技术领域,具体涉及一种代码检测方法、装置、电子设备及存储介质。
背景技术
随着软件技术的不断发展,前后端开发已成为软件开发的主流开发方式。但是,由于开发人员的开发习惯和安全意识等的差异,代码中有时候会存在一些风险信息。例如,一些开发人员有时会将一些敏感信息,如测试用户名、密码等信息硬编码到代码中。
因此,为了确保代码的安全性,开发人员往往需要对代码进行风险测试,来检测出代码中的风险信息,以便开发人员对其进行修改,来保障软件的安全运行。
发明内容
鉴于上述问题,本发明实施例提供了一种代码检测方法、装置、电子设备及存储介质,用于解决现有技术中存在的代码安全性不高的问题。
根据本发明实施例的一个方面,提供了一种代码检测方法,所述方法包括:获取待检测代码;生成所述待检测代码的抽象语法树;将所述抽象语法树中各节点的节点信息与预设检测信息进行匹配,生成所述待检测代码的检测结果;其中,所述节点信息包括节点类型、节点名称和节点属性值中的至少一项,所述预设检测信息包括风险节点类型、风险节点名称以及风险节点属性值中的至少一项。
在一些实施例中,所述将所述抽象语法树中各节点的节点信息与预设检测信息进行匹配,生成所述待检测代码的检测结果,包括:将所述抽象语法树中各节点的节点信息与所述预设检测信息进行匹配;在任一节点的节点信息与所述预设检测信息匹配的情况下,生成所述待检测代码的第一检测结果,所述第一检测结果用于表示所述任一节点为风险节点;在任一节点的节点信息与所述预设检测信息不匹配的情况下,生成所述待检测代码的第二检测结果,所述第二检测结果用于表示所述任一节点为安全节点。
在一些实施例中,所述在任一节点的节点信息与所述预设检测信息匹配的情况下,生成所述待检测代码的第一检测结果,包括:根据所述任一节点的节点名称和节点属性值,将所述任一节点的节点名称和所述任一节点的节点属性值组成键值对;根据所述键值对生成所述待检测代码的第一检测结果。
在一些实施例中,所述方法还包括:根据所述任一节点的节点信息,确定所述任一节点的节点名称;通过访问所述任一节点的父节点,获取所述任一节点的节点属性值。
在一些实施例中,所述待检测代码包括通过网站的代码链接获取的代码,所述代码链接为所述网站的开发代码的代码链接,在获取待检测代码之前,所述方法还包括:接收所述网站的链接信息,并对所述链接信息进行格式校验;在所述链接信息校验通过的情况下,根据所述链接信息获取所述网站的代码链接,以通过所述代码链接获取所述待检测代码。
在一些实施例中,所述根据所述链接信息获取所述网站的代码链接,包括:通过浏览器应用程序访问所述链接信息对应的所述网站,并利用所述浏览器应用程序的数据接口获取所述网站的资源文件链接;根据代码链接后缀和所述资源文件链接对应的资源文件后缀,在所述资源文件链接中提取所述资源文件后缀与所述代码链接后缀相同的资源文件,得到所述代码链接。
在一些实施例中,所述生成所述待检测代码的抽象语法树,包括:利用代码编译器对所述待检测代码进行词法分析和语法分析,生成所述待检测代码的抽象语法树。
根据本发明实施例的另一方面,提供了一种代码检测装置,所述装置包括:获取模块,用于获取待检测代码;语法树生成模块,用于生成所述待检测代码的抽象语法树;结果生成模块,用于将所述抽象语法树中各节点的节点信息与预设检测信息进行匹配,生成所述待检测代码的检测结果;其中,所述节点信息包括节点类型、节点名称和节点属性值中的至少一项,所述预设检测信息包括风险节点类型、风险节点名称以及风险节点属性值中的至少一项。
在一些实施例中,所述结果生成模块,用于将所述抽象语法树中各节点的节点信息与所述预设检测信息进行匹配,在任一节点的节点信息与所述预设检测信息匹配的情况下,生成所述待检测代码的第一检测结果,所述第一检测结果用于表示所述任一节点为风险节点,在任一节点的节点信息与所述预设检测信息不匹配的情况下,生成所述待检测代码的第二检测结果,所述第二检测结果用于表示所述任一节点为安全节点。
在一些实施例中,所述结果生成模块,用于根据所述任一节点的节点名称和节点属性值,将所述任一节点的节点名称和所述任一节点的节点属性值组成键值对;根据所述键值对生成所述待检测代码的第一检测结果。
在一些实施例中,所述结果生成模块,还用于根据所述任一节点的节点信息,确定所述任一节点的节点名称;通过访问所述任一节点的父节点,获取所述任一节点的节点属性值。
在一些实施例中,所述待检测代码包括通过网站的代码链接获取的代码,所述代码链接为所述网站的开发代码的代码链接,在获取待检测代码之前,所述获取模块,还用于接收所述网站的链接信息,并对所述链接信息进行格式校验;在所述链接信息校验通过的情况下,根据所述链接信息获取所述网站的代码链接,以通过所述代码链接获取所述待检测代码。
在一些实施例中,所述获取模块,用于通过浏览器应用程序访问所述链接信息对应的所述网站,并利用所述浏览器应用程序的数据接口获取所述网站的资源文件链接,根据代码链接后缀和所述资源文件链接对应的资源文件后缀,在所述资源文件链接中提取所述资源文件后缀与所述代码链接后缀相同的资源文件,得到所述代码链接。
在一些实施例中,所述语法树生成模块,用于利用代码编译器对所述待检测代码进行词法分析和语法分析,生成所述待检测代码的抽象语法树。
根据本发明实施例的另一方面,提供了一种电子设备,包括:处理器;存储器,用于存放至少一可执行指令;所述可执行指令使所述处理器执行如上任一项所述的代码检测方法的操作。
根据本发明实施例的又一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令在电子设备上运行时,使得电子设备执行如上任一项所述的代码检测方法的操作。
综上,根据本发明实施例提供的代码检测方法、装置、电子设备及存储介质,可以获取待检测代码,生成待检测代码的抽象语法树,将抽象语法树中各节点的节点信息与预设检测信息进行匹配,生成待检测代码的检测结果,可以基于抽象语法树的结构将代码和数据区分开来,解决代码检测中的漏报、误报等问题,提高了代码的安全性,降低了软件被攻击的风险,同时,该方法不会受到代码混淆和压缩的影响,具有较高的可用性。
上述说明仅是本发明实施例技术方案的概述,为了能够更清楚了解本发明实施例的技术手段,而可依照说明书的内容予以实施,并且为了让本发明实施例的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
附图仅用于示出实施方式,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明提供的一种代码检测方法的流程图;
图2示出了本发明提供的一种代码检测方法的子流程图;
图3示出了本发明提供的另一种代码检测方法的子流程图;
图4示出了本发明提供的一种生成检测结果的流程图;
图5示出了本发明提供的一种代码检测系统的结构示意图;
图6示出了本发明提供的一种网站代码检测方法的流程图;
图7示出了本发明提供的一种代码检测装置的结构示意图;
图8示出了本发明提供的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。
在软件开发过程中,前端和后端分离开发模式是一种主流的开发方式,但也会衍生出一些新的问题,例如一些安全意识薄弱的开发人员会将测试时使用的测试用户名、密码、身份令牌、云平台的AK(Access Key Id)/SK(Secret Access Key)等敏感信息以硬编码的方式编码到代码中,导致这些信息极容易被窃取,甚至造成软件的运行和数据安全出现问题。
为了解决这一问题,相关技术的一种方案中,可以通过设置正则表示式来匹配代码中的字符串,来识别代码中的敏感信息。然而,随着代码量的增多,代码中的字符串数据也会不断增加,而正则表达式的设置需要操作人员充分了解代码中的所有的字符串信息,要完全识别出所有的敏感信息具有相当的难度。
此外,为了减小软件的代码体积,防止代码被恶意窃取,操作人员往往会在代码发布时对代码进行混淆和压缩处理,而处理后的代码中的空格、符号等会被删除或替换,所以利用正则表示式识别字符串也可能会产生误报或漏报的情况。
基于此,为了提高代码检测的准确性和全面性,图1示出了本发明实施例提供的一种代码检测方法的流程图,该方法可以由电子设备执行,可以获取待检测代码,并对待检测代码进行分析,确定待检测代码的检测结果,能够识别出代码中的风险信息,确保代码安全。其中,电子设备可以是电脑、平板电脑、智能手机等终端设备。
如图1所示,该方法可以包括以下步骤:
步骤110:获取待检测代码。
其中,待检测代码是指需要进行风险检测的代码,可以包括操作人员输入的程序代码,也可以包括预先获取的程序代码,比如可以是获取的某个应用程序或应用程序的某些功能模块的开发代码等,也可以通过爬虫等技术手段获取的程序代码。
在一些实施例中,待检测代码可以包括通过网站的代码链接获取的代码,该代码链接为网站的开发代码的代码链接,也就是说,代码链接是指网站提供服务所依赖的开发代码的链接信息。
由于在网站发布之后,网站的开发代码,即源代码是存放在服务器上的,因此,为了获取网站的开发代码,可以通过获取网站的代码链接获取待检测代码。在获取代码链接时,可以按照网站的设置规则,通过相应的操作,如切换浏览器应用程序的控制页面,从中选择“查看开发代码”来获取代码链接。
基于此,在步骤110之前,参考图2所示,还可以执行以下方法:
步骤210:接收网站的链接信息,并对链接信息进行格式校验。
其中,网站的链接信息可以是网站的统一资源定位符(Uniform ResourceLocator,URL),URL是由一串字符,如字母、数字和特殊符号构成的序列。
当操作人员在电子设备上输入网站的链接信息时,电子设备可以对该链接信息进行格式校验,如可以检测链接信息是否以http://或https://开头,以.com结尾,以及链接信息中是否包含正确的符号等,来确定链接信息是否是一个完整的URL,如果是,则确定链接信息校验通过,反之,则确定链接信息校验不通过。
步骤220:在链接信息校验通过的情况下,根据链接信息获取网站的代码链接,以通过代码链接获取待检测代码。
链接信息校验通过说明该链接信息所对应的网站能够被正常访问,因此,在链接信息校验通过后,电子设备可以访问该链接信息对应的网站,并自动获取该网站的代码链接或者响应于操作人员的控制操作,来获取代码链接对应的待检测代码。
通过上述方法,电子设备可以对链接信息进行格式校验,并在校验通过时,根据链接信息获取网站的代码链接,从而得到待检测代码,可以实现获取网站的待检测代码的目的,并且通过对链接信息进行格式校验,也可以避免因获取无效的链接信息而造成无法获取待检测代码的问题。
进一步的,在一些实施例中,步骤210可以通过以下方法实现:
通过浏览器应用程序访问链接信息对应的网站,并利用该浏览器应用程序的数据接口获取网站的资源文件链接;
根据代码链接后缀和资源文件链接对应的资源文件后缀,在资源文件链接中提取资源文件后缀与代码链接后缀相同的资源文件,得到代码链接。
其中,网站的数据接口可以是浏览器应用程序提供的日志接口,通过该日志接口,可以采集页面被浏览器应用程序加载呈现时的日志、操作人员的互动行为数据等。
例如,可以通过浏览器应用程序访问链接信息对应的网站,在浏览器应用程序完成网站的加载之后,可以利用网站的数据接口主动读取网站的资源文件链接,然后根据代码链接后缀和所有的资源文件链接的后缀名,如判断资源文件链接的后缀名是否为代码链接后缀:.js,从而从所有的资源文件链接中提取出所有的后缀名与代码链接后缀:.js相同的资源文件,得到代码链接。
本实施例中,浏览器应用程序可以是无头浏览器应用程序,其是一种没有图形用户界面的浏览器应用程序,可以通过命令行界面或使用网络通信来执行相应的指令。
在无头浏览器应用程序中,操作人员可以通过在命令行界面中输入操作命令,来访问链接信息对应的网站,以及利用无头浏览器应用程序的数据接口获取网站的资源文件链接,并使得无头浏览器应用程序可以根据代码链接后缀和资源文件链接对应的资源文件后缀,在资源文件链接中提取资源文件后缀与代码链接后缀相同的资源文件,得到代码链接。
步骤120:生成待检测代码的抽象语法树。
其中,抽象语法树(abstract syntax tree,AST)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,之所以说是抽象的,是因为抽象语法树并不会表示出真实语法出现的每一个细节,比如说,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现。
在获取待检测代码之后,可以对待检测代码进行分析,如确定待检测代码中的代码语句,并根据代码语句的逻辑关系生成待检测代码的抽象语法树。
在一些实施例中,可以利用代码编译器对待检测代码进行词法分析和语法分析,生成待检测代码的抽象语法树。
具体而言,以JavaScript语言编写的待检测代码为例,首先,可以利用JS编译器对待检测代码进行读取,然后将待检测代码按照预定的规则合并成一个的令牌标识,同时,JS编译器会删除空白符、注释等,使得整个待检测代码被分割成一个令牌列表,也可以称为一维数组。
例如,对于代码语言:const a=5,可以转换成[{value:'const',type:'keyword'},{value:'a',type:'identifier'},...]。
然后,令牌列表会被传递至下一步骤,即语法分析。通过语法分析,可以将词法分析得到的令牌列表转换成树形的形式,树中的每个内部节点表示一个运算,而该节点的子节点表示该运算的分量。同时,语法分析还会验证语法,如果语法中存在错误,会输出语法错误。
通过生成待检测代码的抽象语法树,可以将待检测代码转换为树形结构,增强待检测代码的可读性,尤其是在待检测代码为混淆和压缩处理后的代码时,也能够将待检测代码转换为可供分析的树形结构,所以可以提高待检测代码的检测准确度和适应性。
步骤130:将抽象语法树中各节点的节点信息与预设检测信息进行匹配,生成待检测代码的检测结果。
其中,节点的节点信息可以包括节点类型、节点名称和节点属性值中的至少一项。按照节点对应的数据类型,节点类型可以包括语法描述标识、关键字、表达式节点等多种节点;节点名称是指节点的name属性值,节点属性值是指节点对应的Value属性值。例如,对于测试用户名和测试密码这一组数据而言,其对应的测试用户名可以是accesskey ID,则节点的name属性值为accesskey ID,节点对应的Value属性值为节点名称对应的Value属性值,如可以是accesskey Secret的值,也可以是一组由字符、数字等构成的字符串。
预设检测信息可以包括风险节点类型、风险节点名称和风险节点属性值中的至少一项。相对应的,风险节点类型是指风险节点的数据类型是语法描述标识,还是关键字或者表达式语句节点等,可以由操作人员预先配置;风险节点名称是指风险节点的name属性值;风险节点属性值是指风险节点对应的Value属性值。相应的,风险节点名称和风险节点属性值也可以由操作人员根据待检测代码对应的开发人员的账户信息、设备信息等预先配置。
待检测代码的检测结果可以包括待检测代码中是否存在风险,如是否存在风险节点、风险节点的数量,以及风险节点的类型、风险节点的节点名称和节点属性值等。操作人员根据待检测代码的检测结果可以确定风险节点的数量、位置和风险种类等,进而可以确定是否需要修改待检测代码,以规避代码中的风险。
在生成待检测代码的抽象语法树之后,可以将抽象语法树中各节点的节点信息与预设检测信息进行匹配,例如,可以将节点的节点类型与预设检测信息中的风险节点类型进行匹配,将节点的节点名称和节点属性值分别与预设检测信息中对应的风险节点名称和风险节点属性值进行匹配。
如果节点的节点类型与预设检测信息中的风险节点类型一致,节点的节点名称和节点属性值分别与预设检测信息中对应的风险节点名称和风险节点属性值一致,则说明该节点为风险节点。因此,可以生成待检测代码的检测结果,该检测结果中可以包括风险节点的详细信息,如风险节点的节点类型、节点名称和节点属性值等。
在一些实施例中,参考图3所示,步骤130也可以通过以下方法实现:
步骤310:将抽象语法树中各节点的节点信息与预设检测信息进行匹配。
对于抽象语法树中的每个节点,可以将节点的节点信息与预设检测信息进行匹配,确定节点的节点类型、节点名称、节点属性值中的任意一项或多项与预设检测信息中对应的风险节点类型、风险节点名称和风险节点属性值中的任意一项或多项是否匹配。
具体的,如果节点的节点类型与预设检测信息中的风险节点类型相同,且该节点的节点名称与预设检测信息中的风险节点名称相同,该节点的节点属性值与预设检测信息中的风险节点属性值相同,则可以说明节点的节点信息与预设检测信息匹配。
在一些实施例中,如果节点信息中的任意一项与预设检测信息中对应的信息相匹配,也可以认为节点的节点信息与预设检测信息匹配。例如,如果节点的节点信息中的节点类型与预设检测信息中对应的风险节点类型相匹配,则可以认为节点的节点信息与预设检测信息匹配。
步骤320:在任一节点的节点信息与预设检测信息匹配的情况下,生成待检测代码的第一检测结果,第一检测结果用于表示上述任一节点为风险节点。
由于预设检测信息为风险节点的节点信息,所以如果存在任一节点的节点信息与预设检测信息匹配,则说明该任一节点为风险节点,故可以生成表示该节点为风险节点的第一检测结果。
步骤330:在任一节点的节点信息与预设检测信息不匹配的情况下,生成待检测代码的第二检测结果,第二检测结果用于表示上述任一节点为安全节点。
如果存在任一节点的节点信息与预设检测信息不匹配,则说明该任一节点为安全节点,故可以生成表示该节点为安全节点的第二检测结果。
通过上述方法,可以对待检测代码对应的抽象语法树的每个节点进行风险检测,并根据检测结果输出待检测代码的检测结果,有助于操作人员对待检测代码进行风险把控,从而提高代码和应用程序的安全性。
考虑到节点信息与预设检测信息的格式可能不相同,所以为了确定各节点的节点信息与预设检测信息是否匹配,在一些实施例中,还可以对节点信息进行格式转换。
例如,可以将待检测代码对应的抽象语法树中的各个节点的节点名称转换为小写,使其与预设检测信息中的风险节点名称的格式相同,然后将完成格式转换的节点的节点名称与预设检测信息中的风险节点名称进行匹配。
通过对节点信息进行格式转换,可以确保节点信息与预设检测信息的格式相同,确保匹配结果准确。
在生成待检测代码的检测结果时,可以根据节点的节点信息输出检测结果。具体而言,在一些实施例中,如图4所示,步骤320中生成待检测代码的第一检测结果可以通过以下方法实现:
步骤410:根据任一节点的节点名称和节点属性值,将任一节点的节点名称和任一节点的节点属性值组成键值对。
步骤420:根据键值对生成待检测代码的第一检测结果。
在任一节点的节点信息与预设检测信息匹配时,可以确定该任一节点为风险节点,然后可以获取该任一节点的节点名称和节点属性值,将该任一节点的节点名称和节点属性值组成一对键值对,即从抽象语法树获得了一对硬编码的键值对。
节点信息与预设检测信息匹配的节点为抽象语法树中的风险节点,由此,在得到抽象语法树中的所有风险节点对应的键值对时,可以根据这些键值对生成待检测代码的第一检测结果,该第一检测结果可以包括所有键值对的信息。
通过上述方法,可以根据风险节点的节点名称和节点属性值生成待检测代码的第一检测结果,操作人员可以根据第一检测结果确定风险节点的节点信息,以便快速定位风险节点,并对其进行风险处理。
在一些情况下,上述任一节点是根据待检测代码中引用该节点的代码段生成的,也就是说,在抽象语法树中,该节点可能是调用该节点数据的代码段生成的,但该节点的节点属性值并不能够直接从该节点获得。因此,为了确定该节点的节点属性值,可以执行以下方法:
根据任一节点的节点信息,确定该任一节点的节点名称;
通过访问该任一节点的父节点,获取该任一节点的节点属性值。
例如,对于节点名称为accesskey ID的任一节点,其节点名称可以直接根据该节点确定,但节点的属性值可能仅出现在定义该节点的代码段,因此,可以根据该节点的节点信息,确定该节点的节点名称。由于节点的属性值一般是出现在节点的父节点中的,并且抽象语法树可以提供访问父节点的接口,所以通过访问上述任一节点的父节点,可以获取该节点的节点属性值。
通过上述方法,可以获取风险节点的节点名称和节点属性值,从而输出待检测代码的检测结果。
为了说明本发明实施例的应用场景,下面以检测网站代码的硬编码信息为例,对本发明实施例提供的代码检测方法进行阐述。
图5示出了本发明实施例提供的一种代码检测系统的结构示意图,如图5所示,代码检测系统500可以包括电子设备510和网站服务器520。电子设备510与网站服务器520之间通信连接,双方可以进行数据交互。
在网站发布之后,用户可以通过浏览器应用程序访问网站的链接信息,来获取网站服务器520提供的服务。例如,用户可以通过电子设备510向网站服务器520发送信息访问请求,网站服务器520可以响应于接收到的信息访问请求,将该信息访问请求对应的信息发送给电子设备510,从而实现用户获取信息的目的。
为了确定网站的代码是否存在风险,图6示出了本发明实施例提供的一种网站代码检测方法的流程图,该方法可以应用于如图5所示的电子设备510。具体的,如图6所示,可以包括以下步骤:
步骤610:接收待检测网站的链接信息。
其中,待检测网站是指需要进行代码安全检测的网站,待检测网站的链接信息是指待检测网站的URL信息。
示例性的,操作人员可以通过电子设备上安装的浏览器应用程序输入待检测网站的链接信息,达到访问待检测网站的目的。
在接收到待检测网站的链接信息之后,电子设备为了确保链接信息的正确性,可以将链接信息存储到字符串类型的URL变量中,并对该链接信息进行格式校验,如检测链接信息是否以http://或https://开头,如果是,则确定链接信息格式正确,执行下一步骤,如果不是,则链接信息格式不正确,此时可以向电子设备返回提示信息,以提示操作人员重新输入链接信息。
在接收到待检测网站的链接信息之后,电子设备可以生成包括该链接信息的访问请求,并发送至网站服务器。如果网站服务器返回的HTTP返回包状态码为200,则表示网站能够正常工作。
步骤620:获取待检测网站的代码链接。
在确定网站可以正常工作时,电子设备可以获取待检测网站的代码链接。例如,可以在网站加载完成时,通过浏览器应用程序读取日志数据,提取资源文件链接中后缀为.js的资源文件链接,得到代码链接。
步骤630:生成代码链接中的待检测代码的抽象语法树。
例如,浏览器应用程序可以使用http请求方法逐个获取代码链接的内容,得到待检测代码。然后,通过JS编译器可以对待检测代码进行词法分析和语法分析,来将待检测代码转换为抽象语法树。
步骤640:将抽象语法树中各节点的节点信息与预设检测信息进行匹配,得到待检测代码的检测结果。
其中,预设检测信息可以包括风险节点类型、风险节点名称和风险节点属性值三个参数,风险节点类型可以包括语法描述符,该语法描述符可以包括变量名、属性名、参数名等各种声明和引用的名称。
为了确定抽象语法树中各节点是安全节点还是风险节点,可以将抽象语法树中各节点的节点信息与预设检测信息进行匹配。
在进行匹配时,可以遍历抽象语法树中的每个节点,判断各节点的节点信息中的某项信息是否与预设检测信息中对应的信息匹配,如果是,则确定该节点为风险节点,如果不是,则确定该节点为安全节点。
示例性的,可以判断每个节点的节点类型是否与风险节点类型一致,比如是否为语法描述符节点,如果是,则获取该节点的节点名称,将该节点的节点名称与预设检测信息中的风险节点名称进行匹配,如果匹配成功,则进一步获取该节点的节点属性值,将该节点的节点名称和节点属性值一起作为一个键值对,输出为待检测代码的检测结果。
步骤650:输出待检测网站的检测结果。
例如,可以将待检测网站的检测结果输出并显示在电子设备上,使得操作人员可以确定待检测网站中的哪些代码存在风险,以便对其进行维护和修改。
因此,通过上述方法,可以检测网站的代码是否存在风险信息,便于操作人员对代码中的风险信息进行处理,从而提高网站的安全性。
综上,根据本实施例提供的代码检测方法,可以获取待检测代码,生成待检测代码的抽象语法树,将抽象语法树中各节点的节点信息与预设检测信息进行匹配,生成待检测代码的检测结果,可以基于抽象语法树的结构将代码和数据区分开来,解决代码检测中的漏报、误报等问题,提高了代码的安全性,降低了软件被攻击的风险,同时,该方法不会受到代码混淆和压缩的影响,具有较高的可用性。
图7示出了本发明实施例提供的一种代码检测装置的结构示意图。如图7所示,该代码检测装置700可以包括:获取模块710,用于获取待检测代码;语法树生成模块720,用于生成待检测代码的抽象语法树;结果生成模块730,用于将抽象语法树中各节点的节点信息与预设检测信息进行匹配,生成待检测代码的检测结果;其中,节点信息包括节点类型、节点名称和节点属性值中的至少一项,预设检测信息包括风险节点类型、风险节点名称以及风险节点属性值中的至少一项。
在一些实施例中,结果生成模块730,用于将抽象语法树中各节点的节点信息与预设检测信息进行匹配,在任一节点的节点信息与预设检测信息匹配的情况下,生成待检测代码的第一检测结果,第一检测结果用于表示任一节点为风险节点,在任一节点的节点信息与预设检测信息不匹配的情况下,生成待检测代码的第二检测结果,第二检测结果用于表示任一节点为安全节点。
在一些实施例中,结果生成模块730,用于根据任一节点的节点名称和节点属性值,将任一节点的节点名称和任一节点的节点属性值组成键值对;根据键值对生成待检测代码的第一检测结果。
在一些实施例中,结果生成模块730,还用于根据任一节点的节点信息,确定任一节点的节点名称;通过访问任一节点的父节点,获取任一节点的节点属性值。
在一些实施例中,待检测代码包括通过网站的代码链接获取的代码,代码链接为网站的开发代码的代码链接,在获取待检测代码之前,获取模块710,还用于接收网站的链接信息,并对链接信息进行格式校验;在链接信息校验通过的情况下,根据链接信息获取网站的代码链接,以通过代码链接获取待检测代码。
在一些实施例中,获取模块710,用于通过浏览器应用程序访问链接信息对应的网站,并利用浏览器应用程序的数据接口获取网站的资源文件链接,根据代码链接后缀和资源文件链接对应的资源文件后缀,在资源文件链接中提取资源文件后缀与代码链接后缀相同的资源文件,得到代码链接。
在一些实施例中,语法树生成模块720,用于利用代码编译器对待检测代码进行词法分析和语法分析,生成待检测代码的抽象语法树。
上述装置中各模块的具体细节在方法部分实施方式中已经详细说明,未披露的方案细节内容可以参见方法部分的实施方式内容,因而不再赘述。
图8示出了本发明实施例提供的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图8所示,该电子设备可以包括:处理器(processor)802、通信接口(Communications Interface)804、存储器(memory)806、以及通信总线808。
其中:处理器802、通信接口804、以及存储器806通过通信总线808完成相互间的通信。通信接口804,用于与其它设备比如客户端或其它服务器等的网元通信。处理器802,用于执行程序810,具体可以执行上述用于代码检测方法实施例中的相关步骤。
具体地,程序810可以包括程序代码,该程序代码包括计算机可执行指令。
处理器802可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器806,用于存放程序810。存储器806可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序810具体可以被处理器802调用使电子设备执行上述代码检测方法的操作步骤。
本发明实施例提供了一种计算机可读存储介质,所述存储介质存储有至少一可执行指令,该可执行指令在电子设备上运行时,使得所述电子设备执行上述任意方法实施例中的代码检测方法。
可执行指令具体可以用于使得电子设备执行上述代码检测方法的操作步骤。
在此提供的算法或显示不与任何特定计算机、虚拟系统或者其它设备固有相关。此外,本发明实施例也不针对任何特定编程语言。
在此处所提供的说明书中,说明了大量具体细节。然而能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。类似地,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。其中,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。上述实施例中的步骤,除有特殊说明外,不应理解为对执行顺序的限定。
Claims (10)
1.一种代码检测方法,其特征在于,所述方法包括:
获取待检测代码;
生成所述待检测代码的抽象语法树;
将所述抽象语法树中各节点的节点信息与预设检测信息进行匹配,生成所述待检测代码的检测结果;
其中,所述节点信息包括节点类型、节点名称和节点属性值中的至少一项,所述预设检测信息包括风险节点类型、风险节点名称以及风险节点属性值中的至少一项。
2.根据权利要求1所述的方法,其特征在于,所述将所述抽象语法树中各节点的节点信息与预设检测信息进行匹配,生成所述待检测代码的检测结果,包括:
将所述抽象语法树中各节点的节点信息与所述预设检测信息进行匹配;
在任一节点的节点信息与所述预设检测信息匹配的情况下,生成所述待检测代码的第一检测结果,所述第一检测结果用于表示所述任一节点为风险节点;
在任一节点的节点信息与所述预设检测信息不匹配的情况下,生成所述待检测代码的第二检测结果,所述第二检测结果用于表示所述任一节点为安全节点。
3.根据权利要求2所述的方法,其特征在于,所述在任一节点的节点信息与所述预设检测信息匹配的情况下,生成所述待检测代码的第一检测结果,包括:
根据所述任一节点的节点名称和节点属性值,将所述任一节点的节点名称和所述任一节点的节点属性值组成键值对;
根据所述键值对生成所述待检测代码的第一检测结果。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
根据所述任一节点的节点信息,确定所述任一节点的节点名称;
通过访问所述任一节点的父节点,获取所述任一节点的节点属性值。
5.根据权利要求1所述的方法,其特征在于,所述待检测代码包括通过网站的代码链接获取的代码,所述代码链接为所述网站的开发代码的代码链接,在获取待检测代码之前,所述方法还包括:
接收所述网站的链接信息,并对所述链接信息进行格式校验;
在所述链接信息校验通过的情况下,根据所述链接信息获取所述网站的代码链接,以通过所述代码链接获取所述待检测代码。
6.根据权利要求5所述的方法,其特征在于,所述根据所述链接信息获取所述网站的代码链接,包括:
通过浏览器应用程序访问所述链接信息对应的所述网站,并利用所述浏览器应用程序的数据接口获取所述网站的资源文件链接;
根据代码链接后缀和所述资源文件链接对应的资源文件后缀,在所述资源文件链接中提取所述资源文件后缀与所述代码链接后缀相同的资源文件,得到所述代码链接。
7.根据权利要求1所述的方法,其特征在于,所述生成所述待检测代码的抽象语法树,包括:
利用代码编译器对所述待检测代码进行词法分析和语法分析,生成所述待检测代码的抽象语法树。
8.一种代码检测装置,其特征在于,所述装置包括:
获取模块,用于获取待检测代码;
语法树生成模块,用于生成所述待检测代码的抽象语法树;
结果生成模块,用于将所述抽象语法树中各节点的节点信息与预设检测信息进行匹配,生成所述待检测代码的检测结果;
其中,所述节点信息包括节点类型、节点名称和节点属性值中的至少一项,所述预设检测信息包括风险节点类型、风险节点名称以及风险节点属性值中的至少一项。
9.一种电子设备,其特征在于,包括:处理器;
存储器,用于存放至少一可执行指令;
所述可执行指令使所述处理器执行如权利要求1~7任意一项所述的代码检测方法的操作。
10.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一可执行指令,所述可执行指令在电子设备上运行时,使得电子设备执行如权利要求1~7任意一项所述的代码检测方法的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310244794.5A CN116361793A (zh) | 2023-03-09 | 2023-03-09 | 代码检测方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310244794.5A CN116361793A (zh) | 2023-03-09 | 2023-03-09 | 代码检测方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116361793A true CN116361793A (zh) | 2023-06-30 |
Family
ID=86940104
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310244794.5A Pending CN116361793A (zh) | 2023-03-09 | 2023-03-09 | 代码检测方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116361793A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117555955A (zh) * | 2023-12-06 | 2024-02-13 | 广州此声网络科技有限公司 | 数据转换方法、数据转换装置、计算机设备、存储介质 |
-
2023
- 2023-03-09 CN CN202310244794.5A patent/CN116361793A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117555955A (zh) * | 2023-12-06 | 2024-02-13 | 广州此声网络科技有限公司 | 数据转换方法、数据转换装置、计算机设备、存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Gupta et al. | Enhancing the browser-side context-aware sanitization of suspicious HTML5 code for halting the DOM-based XSS vulnerabilities in cloud | |
US10769228B2 (en) | Systems and methods for web analytics testing and web development | |
CN105069355B (zh) | webshell变形的静态检测方法和装置 | |
CN103888490B (zh) | 一种全自动的web客户端人机识别的方法 | |
US8635602B2 (en) | Verification of information-flow downgraders | |
CN104508672B (zh) | 程序执行装置以及程序分析装置 | |
US10250632B2 (en) | Web service testing | |
CN107145784B (zh) | 一种漏洞扫描的方法、装置及计算机可读介质 | |
Alkhalaf et al. | Viewpoints: differential string analysis for discovering client-and server-side input validation inconsistencies | |
US20140150099A1 (en) | Method and device for detecting malicious code on web pages | |
Gupta et al. | A client‐server JavaScript code rewriting‐based framework to detect the XSS worms from online social network | |
CN112688966A (zh) | webshell检测方法、装置、介质和设备 | |
CN115186274A (zh) | 基于iast的安全测试方法及装置 | |
CN116361793A (zh) | 代码检测方法、装置、电子设备及存储介质 | |
CN114036526A (zh) | 漏洞测试方法、装置、计算机设备和存储介质 | |
CN111124937A (zh) | 基于插桩函数辅助提高生成测试用例效率的方法及系统 | |
CN112446030B (zh) | 一种网页端的文件上传漏洞检测方法和装置 | |
CN115310087A (zh) | 一种基于抽象语法树的网站后门检测方法和系统 | |
US10515219B2 (en) | Determining terms for security test | |
CN112181816A (zh) | 一种基于场景的接口测试方法、装置、计算机设备及介质 | |
KR20210076455A (ko) | Xss 공격 검증 자동화 방법 및 그 장치 | |
US11960560B1 (en) | Methods for analyzing recurring accessibility issues with dynamic web site behavior and devices thereof | |
US20240045955A1 (en) | Identifying security events in programming code for logging | |
Gupta et al. | SEC‐H5: secure and efficient integration of settings of enhanced HTML5 XSS vector defensive framework on edge network of fog nodes | |
CN113419738A (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 |