压缩和混淆node.js服务端代码
职坐标 2019-12-16 来源 : 阅读 2070 评论 0

摘要:在前端我们有webpack,gulp等构建工具提供了从项目结构搭建到部署打包,基本所有工作流程所需要的都被覆盖到了。在后台node.js写的服务端却是透明,很多时候我们不愿意交付透明的代码。这个时候就需要对js代码进行压缩混淆。

在前端我们有webpack,gulp等构建工具提供了从项目结构搭建到部署打包,基本所有工作流程所需要的都被覆盖到了。

在后台node.js写的服务端却是透明,很多时候我们不愿意交付透明的代码。这个时候就需要对js代码进行压缩混淆。

压缩和混淆node.js服务端代码


目的


有一个express纯api后台项目,在发布之前需要对他进行压缩混淆。在开发完成以后希望执行一个命令就能得到完整,压缩混淆之后的代码。然后一个命令启动,运行,维护等。


方案查找


百度谷歌上网找文章。找到了下面几种方案,但是都没有很好的案例可以参考。

这里列出几个与js混淆,编译,打包相关的库或网站:


混淆


JavaScript obfuscator-一个强大的JS混淆器。

萨满科技-一套JS代码安全问题解决方案。

UglifyJS2 - 仅支持ECMAScript 5,更高的版本需要用Babel转换


编译


bytenode,一个极简的Node.js字节码编译器。


打包


ncc 可以把Node.js项目打包成一个js单文件,支持 TypeScript,动态导入。

pkg 可以把Node.js项目打包成一个二进制的可执行文件,pkg不支持动态导入,但是会将Node本身一起打包,可以实现在没安装Node.js的环境运行。

pmq20/node-packer 也能打包成一个二进制的可执行文件,它的优势在于支持各种形式的require, 也支持C++模块。可惜项目已经两年没更新了,只支持到Node.js 8.3.0, 对于更高版本的支持,请移步slee047/node-packer。

来源:juejin.im/post/5d89e9… 作者:Winston_Lee


javascript-obfuscator


简介:A free and efficient obfuscator for JavaScript (including ES2017). Make your code harder to copy and prevent people from stealing your work. This tool is a Web UI to the excellent (and open source)

一个免费和高效的JavaScript混淆器(包括ES2017)。让你的代码更难复制,防止别人窃取你的成果。这个工具是一个优秀的Web UI(并且是开源的)


官网:obfuscator.io/


这个库很像在线JavaScript代码压缩网站,实际上也可以做一个在线压缩代码的网站。不过他吸引我的是他的cli工具。

❗ 作者在Github上说了没有很多时间来维护这个项目了,使用请慎重考虑。


文档

官网文档:github.com/javascript-…

自己翻译:sunseekerx.github.io/javascript-…


使用


0x0 全局安装javascript-obfuscator


npm i javascript-obfuscator -g 复制代码


0x1 例如一个express项目,在项目根目录下新建javascript-obfuscator.json


{   "compact": true,   "controlFlowFlattening": true,   "controlFlowFlatteningThreshold": 0.75,   "deadCodeInjection": true,   "deadCodeInjectionThreshold": 0.4,   "debugProtection": false,   "debugProtectionInterval": false,   "disableConsoleOutput": true,   "identifierNamesGenerator": "hexadecimal",   "log": false,   "renameGlobals": false,   "rotateStringArray": true,   "selfDefending": true,   "stringArray": true,   "stringArrayEncoding": "base64",   "stringArrayThreshold": 0.75,   "transformObjectKeys": true,   "unicodeEscapeSequence": false }


0x2 在package.json的script代码块中加上如下命令


下面命令会将压缩好的文件放在根目录下的obfuscated文件夹中,可以看到代码都是经过压缩混淆的,如果开启了selfDefending选项,如果代码经过格式化工具格式化出来也是无法运行的。


javascript-obfuscator ./ --output ./obfuscated --exclude node_modules --config javascript-obfuscator.json


问题


1、以.js为后缀的文件会被压缩混淆但是其他的文件没有复制,达不到想要的开发完成一个命令压缩混淆代码,然后可以得到完成的可以部署的项目。(如果对shell脚本熟悉,可以自己写脚本实现。)

2、项目已经停更,作者没有精力继续维护,存在不能用风险


UglifyJS2


UglifyJS是一个JavaScript解析器,缩小器,压缩器和美化工具包。

UglifyJS is a JavaScript parser, minifier, compressor and beautifier toolkit.


Note:

uglify-js@3 has a simplified API and CLI that is not backwards compatible with uglify-js@2.

Documentation for UglifyJS 2.x releases can be found here.

uglify-js only supports JavaScript (ECMAScript 5).

To minify ECMAScript 2015 or above, transpile using tools like Babel.

官方GitHub仅仅支持ECMAScript 5,弃用。


总结

就目前来看并没有一个很好的方案去压缩混淆Node的项目。不过javascript-obfuscator已经很接近我们想要的效果了。

本文由 @职坐标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程