1. 首页

价值上千万的Node.js源代码,如何防盗

甲方突然要求做私有化部署

项目是用Node.js做的,Node.js代码需要保护吗?

一般情况下不需要,因为代码跑在云端服务器上啊。只要服务器安全,Node.js代码哪怕是明文,也是安全的。

可是凡事不怕一万,就怕万一。假如某天甲方突然要求做私有化部署,而你老板爽快地答应了,并把这个问题丢给你。

好吧,现在情况改变了,你需要代码部署在不信任的环境。一旦把Node.js源代码在甲方的服务器进行打包或上线,那甲方就可以轻易地查看,分析,篡改和复制你的代码。

Js中文网 – 前端进阶资源教程 www.javascriptC.com
你想要的,在这里都能找到

于是开始谷歌

有哪些方法可以保护js代码?

思路是这样的:经过保护的代码要能正常运行(当然,不能运行的代码有什么用),同时还不能让别人轻易地看到源码。简而言之,让机器能读懂,而人难以读懂就行了。

  1. 加密

    我们可以对js代码进行加密,每次执行前进行解密,实际运行的是解密后的代码。但是加密对执行效率会有影响,而且一旦密码被破解,源码也就泄露了。

  2. 混淆

    对代码进行混淆,尽量地让代码变得不可读,据说这个思路是从代码写得很差的程序员身上学来的。常见的做法有:分离常量、打乱控制流、增加无意义代码、域名锁定、混淆字符串,禁用调试等方法。

  3. 编译

    Node.js代码是通过V8引擎来执行的,而V8引擎会将源代码编译成字节码(bytenode)之后再解释执行。如果我们能将Node.js代码编译成字节码, 将会进一步提高代码的安全性。毕竟反编译V8的字节码并非易事。

  4. 打包

    把Node.js代码和依赖,打包成一个可执行文件。这样可以增加一点破解的难度。

然后从github上抄代码

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

  1. 混淆
  2. 编译
    • bytenode,一个极简的Node.js字节码编译器。
  3. 打包
    • 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

选出一个方案交差

没有绝对的安全可言,以上的方法只能是加大破解的难度。有道是世上无难事只怕有心人,只要有足够的技术和耐心,还是有可能还原出相应的代码。

作为防守方,我们能做是尽可能地多采用一些保护手段。在这里,提供一个JavaScript obfuscator + bytenode + node-packer的解决方案。

为什么选用node-packer而不是ncc,pkg呢?因为ncc和pkg无法处理混淆过的代码。

保护价值上千万的代码

假设我们需要保护的是这样的一个项目:


// index.js console.log("以下是价值上千万的代码:"); var a = 1; var b = 1; var c = a + b; console.log("1 + 1 = " + c)

首先我们通过npm安装javascript-obfuscator 和 bytenode。然后在当前系统下安装node-packer。

由于node-packer无法打包由bytenode生成的.jsc字节码文件,所以需要添加以下文件来导入.jsc文件:


// build.js,Js中文网 - 前端进阶资源教程 www.javascriptc.com,坚信用代码改变世界的平台 require('bytenode'); require('./index-obfuscated.jsc');

接着将以下指令加到package.json:


"scripts": { "obfuscate": "javascript-obfuscator index.js --string-array-encoding rc4", "bytenode": "bytenode --compile index-obfuscated.js", "nodec": "nodec build.js --skip-npm-install", "build": "npm run obfuscate && npm run bytenode && npm run nodec", }

最后运行npm run build,可以得到一个a.out(windows系统下是a.exe)的可执行文件。运行一下,价值上千万的代码就跑起来了。

此外你会发现项目目录下多了两个文件:index-obfuscated.js, index-obfuscated.jsc。它们分别是混淆之后的代码以及字节码文件。javascript-obfuscator支持多种混淆技术,可能通过查看文档,按照自己的项目需求,调配选用合适的选项。

结语

除了以上技术手段,别忘了加上license,注明版权信息。

感谢看到最后,最后我将为你免费提供这份价值上千万的代码示例。项目地址是javascript-code-protection-example,欢迎star。

有写的不对的地方,希望各位看官能在评论里不吝赐教。

作者:Winston_Lee
链接:https://juejin.im/post/5d89e996e51d453bc64802c0

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:价值上千万的Node.js源代码,如何防盗

链接:https://www.javascriptc.com/2450.html

« 想学Node.js,那么先搞清楚stream再来吧
jenkins离开你之后,如何用node从零搭建自己的自动化部署平台»
Flutter 中文教程资源

相关推荐

QR code