CN114840822A - 代码保护方法、装置、设备及存储介质 - Google Patents
代码保护方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114840822A CN114840822A CN202210439947.7A CN202210439947A CN114840822A CN 114840822 A CN114840822 A CN 114840822A CN 202210439947 A CN202210439947 A CN 202210439947A CN 114840822 A CN114840822 A CN 114840822A
- Authority
- CN
- China
- Prior art keywords
- code
- javascript file
- file
- source code
- javascript
- 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
- 238000000034 method Methods 0.000 title claims abstract description 73
- 238000003860 storage Methods 0.000 title claims abstract description 17
- 230000003068 static effect Effects 0.000 claims abstract description 43
- 238000010276 construction Methods 0.000 claims abstract description 28
- 230000015654 memory Effects 0.000 claims description 29
- 230000006870 function Effects 0.000 claims description 27
- 238000004590 computer program Methods 0.000 claims description 23
- 238000012217 deletion Methods 0.000 claims description 3
- 230000037430 deletion Effects 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000003993 interaction Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- VYZAMTAEIAYCRO-UHFFFAOYSA-N Chromium Chemical compound [Cr] VYZAMTAEIAYCRO-UHFFFAOYSA-N 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000001012 protector Effects 0.000 description 1
- 238000012360 testing 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/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本说明书涉及前端工程技术领域,提供了一种代码保护方法、装置、设备及存储介质,该方法包括:根据前端工程构建产物的静态资源属性定位JavaScript文件;从所述JavaScript文件的源码函数中获取对应的前端源代码;调用指定的字节码编译器将所述前端源代码编译为二进制代码;将所述二进制代码写入所述JavaScript文件的同级目录。本说明书实施例可以提高前端工程JavaScript文件的源代码的安全性。
Description
技术领域
本说明书涉及前端工程技术领域,尤其是涉及一种代码保护方法、装置、设备及存储介质。
背景技术
代码安全不被泄露关系到科技企业的核心利益,避免代码泄露是科技企业的一项重要工作。对于前端工程的源代码在JavaScript文件中实现的场景,常用的代码保护为:将JavaScript文件进行压缩混淆,以降低代码的可读性;然而,这种方式仍然存在一定的代码泄露风险。因此,如何提高前端工程JavaScript文件的源代码的安全性已成为目前亟待解决的技术问题。
发明内容
本说明书实施例的目的在于提供一种代码保护方法、装置、设备及存储介质,以提高前端工程JavaScript文件的源代码的安全性。
为达到上述目的,一方面,本说明书实施例提供了一种代码保护方法,包括:
根据前端工程构建产物的静态资源属性定位JavaScript文件;
从所述JavaScript文件的源码函数中获取对应的前端源代码;
调用指定的字节码编译器将所述前端源代码编译为二进制代码;
将所述二进制代码写入所述JavaScript文件的同级目录。
本说明书实施例的代码保护方法中,所述根据前端工程构建产物的静态资源属性定位JavaScript文件,包括:
遍历前端工程构建产物的assets属性数组,获取所述assets属性数组中每个静态文件的文件名;
识别每个静态文件的文件名后缀是否为.js;
若静态文件的文件名后缀为.js,则确定该静态文件为JavaScript文件。
本说明书实施例的代码保护方法中,所述调用指定的字节码编译器将所述前端源代码编译为二进制代码,包括:
调用Node.js运行环境的字节码编译器将所述前端源代码编译为二进制代码。
本说明书实施例的代码保护方法中,在所述调用指定的字节码编译器将所述前端源代码编译为二进制代码之前,还包括:
判断所述前端源代码是否允许被动态引入;
当所述前端源代码是否允许被动态引入时,调用Node.js运行环境的包裹方法包裹所述前端源代码。
本说明书实施例的代码保护方法中,所述判断所述前端源代码是否允许被动态引入,包括:
根据预先配置的compileAsModule参数的参数值判断所述前端源代码是否允许被动态引入。
本说明书实施例的代码保护方法中,所述将所述二进制代码写入所述JavaScript文件的同级目录,包括:
调用Node.js运行环境的文件系统模块将所述二进制代码写入所述JavaScript文件的同级目录。
本说明书实施例的代码保护方法中,在所述将所述二进制代码写入所述JavaScript文件的同级目录之后,还包括:
判断是否允许删除所述JavaScript文件;
当允许删除所述JavaScript文件时,删除所述JavaScript文件。
本说明书实施例的代码保护方法中,所述判断是否允许删除所述JavaScript文件,包括:
根据预先配置的keepSourceCode参数的参数值判断是否允许删除所述JavaScript文件。
本说明书实施例的代码保护方法中,所述删除所述JavaScript文件,包括:
调用包管理工具的rimraf命令删除所述JavaScript文件。
本说明书实施例的代码保护方法中,所述前端工程构建产物预先根据构建工具构建得到。
本说明书实施例的代码保护方法中,所述构建工具包括Webpack模块。
另一方面,本说明书实施例还提供了一种代码保护装置,包括:
定位模块,用于根据前端工程构建产物的静态资源属性定位JavaScript文件;
获取模块,用于从所述JavaScript文件的源码函数中获取对应的前端源代码;
调用模块,用于调用指定的字节码编译器将所述前端源代码编译为二进制代码;
写入模块,用于将所述二进制代码写入所述JavaScript文件的同级目录。
另一方面,本说明书实施例还提供了一种计算机设备,包括存储器、处理器、以及存储在所述存储器上的计算机程序,所述计算机程序被所述处理器运行时,执行上述方法的指令。
另一方面,本说明书实施例还提供了一种计算机存储介质,其上存储有计算机程序,所述计算机程序被计算机设备的处理器运行时,执行上述方法的指令。
另一方面,本说明书实施例还提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被计算机设备的处理器运行时,执行上述方法的指令。
由以上本说明书实施例提供的技术方案可见,本说明书实施例可将前端工程中输出的所有JavaScript文件编译为二进制代码,并写入对应JavaScript文件的同级目录中。由于二进制代码已经完全不具备可读性,并且保持代码可以运行,同时二进制代码也不能还原(或者反编译)为JavaScript代码,从而降低了前端工程中输出的JavaScript文件对应源代码的泄露风险,提高了前端工程中输出的JavaScript文件对应源代码的安全性。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示出了本说明书一些实施例中前端开发环境与代码保护装置的关系示意图;
图2示出了本说明书一些实施例中的代码保护方法的流程图;
图3示出了本说明书另一些实施例中的代码保护方法的流程图;
图4示出了本说明书另一些实施例中的代码保护方法的流程图;
图5示出了本说明书一些实施例中代码保护装置的结构框图;
图6示出了本说明书另一些实施例中代码保护装置的结构框图;
图7示出了本说明书另一些实施例中代码保护装置的结构框图;
图8示出了本说明书一些实施例中计算机设备的结构框图。
【附图标记说明】
10、JavaScript运行环境;
20、代码保护装置;
51、定位模块;
52、获取模块;
53、调用模块;
54、写入模块;
55、文件控制模块;
56、引入控制模块;
802、计算机设备;
804、处理器;
806、存储器;
808、驱动机构;
810、输入/输出接口;
812、输入设备;
814、输出设备;
816、呈现设备;
818、图形用户接口;
820、网络接口;
822、通信链路;
824、通信总线。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
网站或者系统工程的代码都分为前端源代码和后端源代码。前端源代码主要负责页面的展现、页面交互操作;后端代码主要实现网站或者系统的功能,如增加、删除、修改和查询数据等操作。而本说明书实施例主要涉及前端代码工程(即前端工程)的JavaScript文件的保护。
为实现前端工程中输出的JavaScript文件的相对安全,传统的代码保护一般将JavaScript文件进行混淆和/或压缩,以降低代码的可读性。然而,这种方式仍然存在一定的代码泄露风险。例如,如xxxx网站首页(https://www.xxxx.com/),在页面上点击右键→“检查”或者按F12键打开开发者工具,在开发者工具的源代码tab页下,均会展示本页面的所有静态资源,包括图片资源(各种jpg、png等图片)、css样式文件、JavaScript交互文件、html页面内容文件,字体文件等。如上述的JavaScript展现在一行上,表明本页面的代码经过压缩混淆。然而,通过Beautifier等工具可以将压缩和混淆后的代码重新美化为可读性较强的代码,从而使得经过压缩混淆的代码仍然处于较大泄露风险之下。
有鉴于此,本说明书实施例提供了新的前端工程输出的JavaScript文件的保护技术,可以应用于JavaScript运行环境中。由于JavaScript是脚本语言,JavaScript文件需要一个解析器才能运行,而且在不同场景下,可以有不同的解析器实现;如对于写入html的JavaScript文件,浏览器可以作为解析器。而对于需要独立运行的JavaScript文件,Node.js可以作为解析器(Node.js是一个基于Chrome V8引擎的JavaScript运行环境)。JavaScript运行环境不但允许JavaScript文件定义各种数据结构,进行各种计算,还允许JavaScript文件使用JavaScript运行环境内部提供的内置对象和方法。如运行在浏览器中的JavaScript文件的用途是操作文档对象模型(Document Object Model,DOM),浏览器就提供了文档(document)之类的内置对象。而运行在Node.js中的JavaScript文件的用途是操作磁盘文件或搭建http服务器,Node.js就相应提供了fs、http等内置对象。
前端工程可基于相应的构建工具(如Webpack、Rollup、Vite等)构建,即可以利用构建工具对工程代码进行打包编译。构建工具可以对前端工程代码中的图片资源文件(如png、jpg、svg等)进行压缩或合并;样式文件(如less、scss、css等)编译和压缩,JavaScript文件代码转换操作(es6转换为es5)等操作,构建工具将工程代码编译和转换后输出到可以在浏览器或者Node.js直接运行的代码。
如图1所示,在本说明书一些实施例中,可以开发出一种应用于上述JavaScript运行环境10中的代码保护装置20,该代码保护装置20可在基于构建工具构建网站或者系统等构建产物过程中的适当时机执行,以将前端工程中输出的所有JavaScript文件编译为二进制代码,并写入对应JavaScript文件的同级目录中。由于二进制代码已经完全不具备可读性,并且保持代码可以运行,同时二进制代码也不能还原(或者反编译)为JavaScript代码,从而保护了JavaScript文件内容(即JavaScript文件对应的源代码)不被泄露。其中,代码保护装置20可以是一种插件,并预先安装于JavaScript运行环境10中,以便于扩展和维护。例如,以Node.js运行环境为例,可以将上述代码保护装置作为JS包管理工具(例如npm或yarn)的插件安装。
例如,在一些实施例中,鉴于目前Webpack在前端工程的打包编译的使用率最高,在基于Webpack构建网站或者系统等构建产物的场景下,上述的代码保护装置可以在基于Webpack构建网站或者系统等构建产物过程中的emit阶段执行。其中,emit阶段是指:在生成构建产物(asset)之后到输出(output)目录之前的中间阶段。
本说明书实施例提供了一种代码保护方法,可以应用于上述的代码保护装置侧。参考图2所示,在一些实施例中,所述代码保护方法可以包括以下步骤:
步骤201、根据前端工程构建产物的静态资源属性定位JavaScript文件。
前端工程构建产物例如可以为网站或系统等,前端工程构建产物的静态资源即为静态资源文件。静态资源文件可以包括html文件(即浏览器可以打开的文件)、css样式文件(网站页面的样式)、JavaScript文件(负责网站交互的文件)、图片资源、字体资源等文件。
在一些实施例中,所述根据前端工程构建产物的静态资源属性定位JavaScript文件,可以包括:
(1)、遍历前端工程构建产物的assets属性数组,获取所述assets属性数组中每个静态文件的文件名。
例如,以在Webpack的emit阶段执行为例,emit生命周期函数的回调函数为编译(compilation)函数,compilation函数包含本次构建产物的属性信息。其中compilation函数的assets属性数组(数组的每一元素为构建出的静态文件)包含了本次构建产物的所有静态资源。因此,需要通过该遍历assets属性数组的方式获取assets属性数组中每个静态文件的文件名。
(2)、识别每个静态文件的文件名后缀是否为.js。
由于assets属性数组中每个静态文件的文件名都包含有文件名后缀,不同的文件名后缀可以表示不同类型的文件;例如,JavaScript文件的文件名后缀为.js,图片资源文件的文件名后缀为.png、.jpg或.svg等。因此,通过识别每个静态文件的文件名后缀即可以判断出对应的静态文件是否为JavaScript文件。
(3)、若静态文件的文件名后缀为.js,则确定该静态文件为JavaScript文件;否则确定该静态文件为非JavaScript文件(非JavaScript文件不需要进行二进制代码转换)。如此,可以自动定位出整个前端工程构建产物输出的所有JavaScript文件,无需人工手动处理。
步骤202、从所述JavaScript文件的源码函数中获取对应的前端源代码。
对于定位出的前端工程构建产物中的每个JavaScript文件,其源码函数即为source函数,source函数中包含有JavaScript文件的源代码,即从JavaScript文件的source函数中可以获取到对应的前端源代码。如此,可以获得前端工程构建产物中每个JavaScript文件的前端源代码。
步骤203、调用指定的字节码编译器将所述前端源代码编译为二进制代码。
例如,在一些实施例中,可以调用Node.js运行环境的字节码编译器(即Node.js中bytenode库的compileCode方法)将所述前端源代码编译为二进制代码。当然,在其他实施例中,也可以采用其他任何可以将JavaScript文件的源代码自动编译为二进制代码的字节码编译器实现。
步骤204、将所述二进制代码写入所述JavaScript文件的同级目录。
例如,在一些实施例中,可以调用Node.js运行环境的文件系统模块(fs模块)将所述二进制代码写入所述JavaScript文件的同级目录。其中,二进制代码对应的文件扩展名可以为jsc。通过将二进制代码写入对应JavaScript文件的同级目录中,可以有利于保证代码的正常运行。
基于本说明书实施例的代码保护方法,可以将前端工程中输出的所有JavaScript文件编译为二进制代码(即二进制文件),并写入对应JavaScript文件的同级目录中。由于二进制代码已经完全不具备可读性,并且保持代码可以运行,同时二进制代码也不能还原(或者反编译)为JavaScript代码,从而降低了前端工程中输出的JavaScript文件对应源代码的泄露风险,提高了前端工程中输出的JavaScript文件对应源代码的安全性。
本说明书实施例提供了另一种代码保护方法,可以应用于上述的代码保护装置侧。参考图3所示,在另一些实施例中,所述代码保护方法可以包括以下步骤:
步骤301、根据前端工程构建产物的静态资源属性定位JavaScript文件。
步骤302、从所述JavaScript文件的源码函数中获取对应的前端源代码。
步骤303、调用指定的字节码编译器将所述前端源代码编译为二进制代码。
步骤304、将所述二进制代码写入所述JavaScript文件的同级目录。
步骤305、判断是否允许删除所述JavaScript文件;如果允许删除所述JavaScript文件,则执行步骤306,否则结束(即结束本JavaScript文件的处理)。
例如,在一些实施例中,可以根据预先配置的keepSourceCode参数的参数值判断是否允许删除所述JavaScript文件。keepSourceCode参数类型为布尔值,即keepSourceCode参数的参数值可以为是(true)或false(否);具体可以根据需要配置。
当keepSourceCode的参数值为true时,表示保留JavaScript文件。保留JavaScript文件可以理解为开发态。二进制文件(即JavaScript文件的前端源代码编译成二进制代码后对应的二进制文件)无法定位错误所在的行数和列数,定位错误困难,若二进制代码所在文件报错(即前端工程有bug),由于保留了JavaScript文件,前端工程开发者还可以便捷地从保留的JavaScript文件中快速定位错误,因而适用于前端工程的开发测试阶段。
当keepSourceCode的参数值为false时,表示允许删除JavaScript文件。删除JavaScript文件可以理解为生产态。由于程序bug已经几乎在开发态处理完成,在生产态无需再为程序测试或调试保留JavaScript文件;即在最终部署到服务器上的文件中,需要删除JavaScript文件,以防止JavaScript文件在生产环境被获取,从而可以有利于进一步降低源码泄露风险。
步骤306、删除所述JavaScript文件。
例如,在一些实施例中,当允许删除所述JavaScript文件时,可以调用包管理工具(例如npm或yarn)的rimraf命令删除所述JavaScript文件,以降低JavaScript文件的源码泄露风险。
因此,基于图3所示的代码保护方法实施例,不仅降低了前端工程中输出的JavaScript文件对应源代码的泄露风险,还提高了前端工程的可配置性和灵活性。
本说明书实施例提供了另一种代码保护方法,可以应用于上述的代码保护装置侧。参考图4所示,在另一些实施例中,所述代码保护方法可以包括以下步骤:
步骤401、根据前端工程构建产物的静态资源属性定位JavaScript文件。
步骤402、从所述JavaScript文件的源码函数中获取对应的前端源代码。
步骤403、判断所述前端源代码是否允许被动态引入;如果所述前端源代码允许被动态引入则执行步骤404;否则执行步骤405。
例如,在一些实施例中,可以根据预先配置的compileAsModule参数判断所述前端源代码是否允许被动态引入。判断前端源代码是否允许被动态引入是指:判断对应的二进制文件是否支持被其他工程或者文件动态引入,从而作为其他工程或者文件的模块或一部分。compileAsModule参数类型为布尔值,即compileAsModule参数的参数值可以为是(true)或false(否);具体可以根据需要配置。当compileAsModule参数的参数值为true时,表示对应的二进制文件支持被其他工程或者文件动态引入;当compileAsModule参数的参数值为false时,表示对应的二进制文件不支持被其他工程或者文件动态引入。
步骤404、调用Node.js运行环境的包裹方法包裹所述前端源代码。
例如,在一些实施例中,当所述前端源代码允许被动态引入时,可以调用Node.js运行环境中node模块(node module)的wrap方法包裹所述前端源代码。当所述前端源代码允许被动态引入时,在调用指定的字节码编译器将前端源代码编译为二进制代码之前,需要先调用Node.js运行环境的包裹方法包裹前端源代码,否则会导致后续编译出的二进制代码无法被动态引入。如此,通过增加步骤403和步骤404可以提高前端工程的可扩展性和适用范围。
步骤405、调用指定的字节码编译器将所述前端源代码编译为二进制代码。
步骤406、将所述二进制代码写入所述JavaScript文件的同级目录。
步骤407、判断是否允许删除所述JavaScript文件;如果允许删除所述JavaScript文件,则执行步骤408,否则结束(即结束本JavaScript文件的处理)。
步骤408、删除所述JavaScript文件。
因此,基于图4所示的代码保护方法实施例,不仅降低了前端工程中输出的JavaScript文件对应源代码的泄露风险,提高了前端工程的可配置性和灵活性,还提高了前端工程的可扩展性和适用范围。
虽然上文描述的过程流程包括以特定顺序出现的多个操作,但是,应当清楚了解,这些过程可以包括更多或更少的操作,这些操作可以顺序执行或并行执行(例如使用并行处理器或多线程环境)。
与上述图2所示代码保护方法对应,本说明书实施例还提供了一种代码保护装置,参考图5所示,所述代码保护装置可以包括:
定位模块51,可以用于根据前端工程构建产物的静态资源属性定位JavaScript文件;
获取模块52,可以用于从所述JavaScript文件的源码函数中获取对应的前端源代码;
调用模块53,可以用于调用指定的字节码编译器将所述前端源代码编译为二进制代码;
写入模块54,可以用于将所述二进制代码写入所述JavaScript文件的同级目录。
图5所示的代码保护装置可在基于构建工具构建网站或者系统的构建产物过程中的适当时机执行,以将前端工程的JavaScript文件编译为二进制代码,并写入对应JavaScript文件的同级目录中。由于二进制代码已经完全不具备可读性,并且保持代码可以运行,同时二进制代码也不能还原(或者反编译)为JavaScript代码,从而保护了JavaScript文件内容不被泄露,即降低了前端工程中输出的JavaScript文件的源代码泄露风险。
与上述图3所示代码保护方法对应,本说明书实施例还提供了另一种代码保护装置,参考图6所示,所述代码保护装置可以包括:
定位模块51,可以用于根据前端工程构建产物的静态资源属性定位JavaScript文件;
获取模块52,可以用于从所述JavaScript文件的源码函数中获取对应的前端源代码;
调用模块53,可以用于调用指定的字节码编译器将所述前端源代码编译为二进制代码;
写入模块54,可以用于将所述二进制代码写入所述JavaScript文件的同级目录。
文件控制模块55,可以用于判断是否允许删除所述JavaScript文件;当允许删除所述JavaScript文件时,删除所述JavaScript文件。
在图6所示的代码保护装置实施例中,所述判断是否允许删除所述JavaScript文件,可以包括:
根据预先配置的keepSourceCode参数的参数值判断是否允许删除所述JavaScript文件。
在图6所示的代码保护装置实施例中,所述删除所述JavaScript文件,可以包括:
调用包管理工具的rimraf命令删除所述JavaScript文件。
因此,基于图6所示的代码保护装置实施例,不仅降低了前端工程中输出的JavaScript文件对应源代码的泄露风险,还提高了前端工程的可配置性和灵活性。
与上述图4所示代码保护方法对应,本说明书实施例还提供了另一种代码保护装置,参考图7所示,所述代码保护装置可以包括:
定位模块51,可以用于根据前端工程构建产物的静态资源属性定位JavaScript文件;
获取模块52,可以用于从所述JavaScript文件的源码函数中获取对应的前端源代码;
调用模块53,可以用于调用指定的字节码编译器将所述前端源代码编译为二进制代码;
写入模块54,可以用于将所述二进制代码写入所述JavaScript文件的同级目录。
文件控制模块55,可以用于判断是否允许删除所述JavaScript文件;当允许删除所述JavaScript文件时,删除所述JavaScript文件。
引入控制模块56,可以用于在调用模块53调用指定的字节码编译器将所述前端源代码编译为二进制代码之前,判断所述前端源代码是否允许被动态引入;当所述前端源代码是否允许被动态引入时,调用Node.js运行环境的包裹方法包裹所述前端源代码。
在图7所示的代码保护装置实施例中,所述判断所述前端源代码是否允许被动态引入,可以包括:
根据预先配置的compileAsModule参数的参数值判断所述前端源代码是否允许被动态引入。
基于图7所示的代码保护装置实施例,不仅降低了前端工程中输出的JavaScript文件对应源代码的泄露风险,提高了前端工程的可配置性和灵活性,还提高了前端工程的可扩展性和适用范围。
在上述图5~图7所示的代码保护装置实施例中,所述根据前端工程构建产物的静态资源属性定位JavaScript文件,可以包括:
遍历前端工程构建产物的assets属性数组,获取所述assets属性数组中每个静态文件的文件名;
识别每个静态文件的文件名后缀是否为.js;
若静态文件的文件名后缀为.js,则确定该静态文件为JavaScript文件。
在上述图5~图7所示的代码保护装置实施例中,所述调用指定的字节码编译器将所述前端源代码编译为二进制代码,包括:
调用Node.js运行环境的字节码编译器将所述前端源代码编译为二进制代码。
在上述图5~图7所示的代码保护装置实施例中,所述将所述二进制代码写入所述JavaScript文件的同级目录,包括:
调用Node.js运行环境的文件系统模块将所述二进制代码写入所述JavaScript文件的同级目录。
在上述图5~图7所示的代码保护装置实施例中,所述前端工程构建产物预先根据构建工具构建得到。
在上述图5~图7所示的代码保护装置实施例中,所述构建工具包括Webpack模块。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本说明书的实施例还提供一种计算机设备。如图8所示,在本说明书一些实施例中,所述计算机设备802可以包括一个或多个处理器804,诸如一个或多个中央处理单元(CPU)或图形处理器(GPU),每个处理单元可以实现一个或多个硬件线程。计算机设备802还可以包括任何存储器806,其用于存储诸如代码、设置、数据等之类的任何种类的信息,一具体实施例中,存储器806上并可在处理器804上运行的计算机程序,所述计算机程序被所述处理器804运行时,可以执行上述任一实施例所述的代码保护方法的指令。非限制性的,比如,存储器806可以包括以下任一项或多种组合:任何类型的RAM,任何类型的ROM,闪存设备,硬盘,光盘等。更一般地,任何存储器都可以使用任何技术来存储信息。进一步地,任何存储器可以提供信息的易失性或非易失性保留。进一步地,任何存储器可以表示计算机设备802的固定或可移除部件。在一种情况下,当处理器804执行被存储在任何存储器或存储器的组合中的相关联的指令时,计算机设备802可以执行相关联指令的任一操作。计算机设备802还包括用于与任何存储器交互的一个或多个驱动机构808,诸如硬盘驱动机构、光盘驱动机构等。
计算机设备802还可以包括输入/输出接口810(I/O),其用于接收各种输入(经由输入设备812)和用于提供各种输出(经由输出设备814)。一个具体输出机构可以包括呈现设备816和相关联的图形用户接口818(GUI)。在其他实施例中,还可以不包括输入/输出接口810(I/O)、输入设备812以及输出设备814,仅作为网络中的一台计算机设备。计算机设备802还可以包括一个或多个网络接口820,其用于经由一个或多个通信链路822与其他设备交换数据。一个或多个通信总线824将上文所描述的部件耦合在一起。
通信链路822可以以任何方式实现,例如,通过局域网、广域网(例如,因特网)、点对点连接等、或其任何组合。通信链路822可以包括由任何协议或协议组合支配的硬连线链路、无线链路、路由器、网关功能、名称服务器等的任何组合。
本申请是参照本说明书一些实施例的方法、设备(系统)、计算机可读存储介质和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理器的处理器以产生一个机器,使得通过计算机或其他可编程数据处理器的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理器以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理器上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算机设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算机设备访问的信息。按照本说明书中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理器来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
还应理解,在本说明书实施例中,术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系。例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书实施例的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (15)
1.一种代码保护方法,其特征在于,包括:
根据前端工程构建产物的静态资源属性定位JavaScript文件;
从所述JavaScript文件的源码函数中获取对应的前端源代码;
调用指定的字节码编译器将所述前端源代码编译为二进制代码;
将所述二进制代码写入所述JavaScript文件的同级目录。
2.如权利要求1所述的代码保护方法,其特征在于,所述根据前端工程构建产物的静态资源属性定位JavaScript文件,包括:
遍历前端工程构建产物的assets属性数组,获取所述assets属性数组中每个静态文件的文件名;
识别每个静态文件的文件名后缀是否为.js;
若静态文件的文件名后缀为.js,则确定该静态文件为JavaScript文件。
3.如权利要求1所述的代码保护方法,其特征在于,所述调用指定的字节码编译器将所述前端源代码编译为二进制代码,包括:
调用Node.js运行环境的字节码编译器将所述前端源代码编译为二进制代码。
4.如权利要求1所述的代码保护方法,其特征在于,在所述调用指定的字节码编译器将所述前端源代码编译为二进制代码之前,还包括:
判断所述前端源代码是否允许被动态引入;
当所述前端源代码是否允许被动态引入时,调用Node.js运行环境的包裹方法包裹所述前端源代码。
5.如权利要求4所述的代码保护方法,其特征在于,所述判断所述前端源代码是否允许被动态引入,包括:
根据预先配置的compileAsModule参数的参数值判断所述前端源代码是否允许被动态引入。
6.如权利要求1所述的代码保护方法,其特征在于,所述将所述二进制代码写入所述JavaScript文件的同级目录,包括:
调用Node.js运行环境的文件系统模块将所述二进制代码写入所述JavaScript文件的同级目录。
7.如权利要求1所述的代码保护方法,其特征在于,在所述将所述二进制代码写入所述JavaScript文件的同级目录之后,还包括:
判断是否允许删除所述JavaScript文件;
当允许删除所述JavaScript文件时,删除所述JavaScript文件。
8.如权利要求7所述的代码保护方法,其特征在于,所述判断是否允许删除所述JavaScript文件,包括:
根据预先配置的keepSourceCode参数的参数值判断是否允许删除所述JavaScript文件。
9.如权利要求7所述的代码保护方法,其特征在于,所述删除所述JavaScript文件,包括:
调用包管理工具的rimraf命令删除所述JavaScript文件。
10.如权利要求1所述的代码保护方法,其特征在于,所述前端工程构建产物预先根据构建工具构建得到。
11.如权利要求10所述的代码保护方法,其特征在于,所述构建工具包括Webpack模块。
12.一种代码保护装置,其特征在于,包括:
定位模块,用于根据前端工程构建产物的静态资源属性定位JavaScript文件;
获取模块,用于从所述JavaScript文件的源码函数中获取对应的前端源代码;
调用模块,用于调用指定的字节码编译器将所述前端源代码编译为二进制代码;
写入模块,用于将所述二进制代码写入所述JavaScript文件的同级目录。
13.一种计算机设备,包括存储器、处理器、以及存储在所述存储器上的计算机程序,其特征在于,所述计算机程序被所述处理器运行时,执行根据权利要求1-11任意一项所述方法的指令。
14.一种计算机存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被计算机设备的处理器运行时,执行根据权利要求1-11任意一项所述方法的指令。
15.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,所述计算机程序被处理器运行时,执行根据权利要求1-11任意一项所述方法的指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210439947.7A CN114840822A (zh) | 2022-04-25 | 2022-04-25 | 代码保护方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210439947.7A CN114840822A (zh) | 2022-04-25 | 2022-04-25 | 代码保护方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114840822A true CN114840822A (zh) | 2022-08-02 |
Family
ID=82565928
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210439947.7A Pending CN114840822A (zh) | 2022-04-25 | 2022-04-25 | 代码保护方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114840822A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115686525A (zh) * | 2022-09-09 | 2023-02-03 | 上海和今信息科技有限公司 | 一种代码处理方法及装置 |
CN118170567A (zh) * | 2024-05-14 | 2024-06-11 | 智慧眼科技股份有限公司 | 一种后端程序调用前端函数方法及系统 |
-
2022
- 2022-04-25 CN CN202210439947.7A patent/CN114840822A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115686525A (zh) * | 2022-09-09 | 2023-02-03 | 上海和今信息科技有限公司 | 一种代码处理方法及装置 |
CN118170567A (zh) * | 2024-05-14 | 2024-06-11 | 智慧眼科技股份有限公司 | 一种后端程序调用前端函数方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109062582B (zh) | 一种应用安装包的加密方法及装置 | |
CN114840822A (zh) | 代码保护方法、装置、设备及存储介质 | |
TWI536263B (zh) | 將作業系統之原始應用程式介面投射至其它程式語言 | |
CN110032388B (zh) | 一种增量文件的构建、发布、下载方法及装置 | |
CN112559026B (zh) | 基于api接口的原生能力拓展方法、设备及存储介质 | |
CN112069468B (zh) | 一种页面动态水印的方法及设备 | |
CN112667246A (zh) | 应用功能扩展的方法、装置及电子设备 | |
CN112148263B (zh) | 前端标准框架及其生成方法、装置、设备及存储介质 | |
CN111367512B (zh) | 一种应用程序开发中创建Android库模块依赖关系的方法及装置 | |
CN111813460A (zh) | 一种应用程序配套文件的存取方法、装置、设备及存储介质 | |
CN110941443B (zh) | 修改sdk中文件名的方法、装置及电子设备 | |
CN110825365B (zh) | 一种定制webview特性的方法、装置、设备和介质 | |
CN110018831B (zh) | 程序处理方法、装置及计算机可读存储介质 | |
CN116521144A (zh) | 一种程序封装方法、装置及电子设备 | |
US20240160421A1 (en) | Integrated development system and method, for user interface platform, having source compiler | |
CN115048083A (zh) | 组件的可视化方法、装置、存储介质及电子设备 | |
CN111428209B (zh) | 一种应用程序的混淆方法、装置及存储介质 | |
CN110554867B (zh) | 一种应用程序的处理方法和装置 | |
CN106897588B (zh) | 一种标签函数的处理方法及装置 | |
CN110716746B (zh) | 将rn样式代码转换为小程序样式代码的方法及装置 | |
CN107479899B (zh) | 文件处理方法和装置、存储介质及处理器 | |
CN117519691B (zh) | 应用程序处理方法、装置、计算机设备和存储介质 | |
CN110968709B (zh) | 数据传输方法及相关系统 | |
CN111273944B (zh) | 生成程序文件并上传至代码仓库的方法及装置 | |
US20240201963A1 (en) | Integrated user interface platform development system and method of single-page application type |
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 |