如何保密nodejs工程的代码?
发布于 9 年前 作者 wf744 30278 次浏览 最后一次编辑是 8 年前 来自 问答

我们有一个nodejs的工程,准备要交付给代理商,但是我们不希望代理商看到我们的代码,他们只需要拿到一个可执行的程序就可以了,但是由于nodejs本身的原因,js代码都是没有任何安全措施的,请教大牛有什么”安全措施”或者权限设置来对我们的代码进行保护?

PS.在这之前我们已经尝试过寻找解决方案

  1. nexe 这个由于不支持fork模式,不支持本地模块,所以基本可以否定了? 2.docker,还在研究是否能满足我们的需求
32 回复

我们团队当初采用的方式:给所有后端代码压缩混淆发布出一个新的工程,达到不能正常维护的标准。 https://www.npmjs.com/package/dir-compress

@fancylife 这个是一个方法,但是这样会不会产生以下问题? 1.代码多了,影响nodejs的运行效率 2.出错时,这个出错的栈信息比正常没有经过混淆的增加调试的复杂度 3.uglify-js 混淆的正确性是否有保证?

1.代码多了,影响nodejs的运行效率? 是的,的确会影响性能,毕竟压缩混淆过了。

2.出错时,这个出错的栈信息比正常没有经过混淆的增加调试的复杂度。 混淆过的代码几乎无可读性了,日志中的错误信息也不能和本地代码块对应

3.uglify-js 混淆的正确性是否有保证? 这个问题通常不存在,主要问题存在于书写代码上要更加规范,要不然uglify-js 压缩不会通过

不都是从github上抄过来的么?这也当宝贝

@fancylife 以上这3点中,最想解决的就是第二点,因为程序比较复杂,出bug再所难免,所以希望能得到完好的错误栈;

不知道兄弟对docker了解不了解,能不能实现那种我们把代码环境都弄好在一个镜像里面,然后扔给运维,运维只能运行就好了,其他他都不能访问到

@wf744 docker可以实现把… 初学者是这么认为的… 但是镜像里面也可以获取代码啊…

看什么样的代码,我的观点是基础设施开源,核心业务代码闭源。

如果你的代码仅仅是对基础设施进行更改,加上一些非核心的业务代码,比如数据库操作什么的,你给源代码,人家还懒得看呢。

核心业务代码,比如排料算法,行业相关算法等,这些用C或者C++写,给node调用,这样在保密和性能上都能保证。

@coordcn 你这个方法也是挺不错的,性能和保密都兼顾了,不过由于项目文件比较多,而且都是使用js写完了,所以在没有遇到性能问题之前,应该不会用C++来重新实现一遍的,不过对于关键的地方,确实可以使用该方法

就是不知道还有没有其他更好的方法?

混淆是不错的方案 自豪地采用 CNodeJS ionic

自己要留一份src 自豪地采用 CNodeJS ionic

自己实现一个 require 吧,这个require是先进行解密,然后调用nodejs require,js 文件可以加密成对应的加密文件,这样子执行的其实还是原文件,log都是正常的
一般来说代码加密都是在加载器loader上做手脚,java的加密就是自定义classLoader

@fantasyni 兄弟,你说的这个方法,不错,基本都可以兼顾以上的3个问题; 同时请问加密解密代码这块有什么资料可以推荐一下吗?

@wf744 可以参考下 cocos2d-js 的方案

加上license,注明版权。 个人认为,让他抄呗,软件这种东西卖的是思维逻辑,我们又不是微软,大可以直接放github上看有没有人给你star。

我现在也有同样的问题,不知道楼主现在是否已经解决这个问题,具体方案能否分享一下。谢谢

还是docker好, 只开一个应用端口,其它都不映射, 启动时让当前应用占用默认的tty,结束进程一起停止docker

前些天发现 Webpack 可以用来打包后端代码, 感觉也许可以试一下, 至少可以打包和压缩一下… 加密就不一定了… 他总共写了三篇, 忘了在 1 还是 2 里边了 http://jlongster.com/Backend-Apps-with-Webpack–Part-II

我也有相同的问题,所以打算转向GoLang了

另外,哪位哥们有兴趣,帮我看下这个问题,https://cnodejs.org/topic/562e3dcf4609eb8a447a89f6,先谢了。

你好 请问最终使用什么解决方案能否介绍下呢?

@ystyle 请问占用默认的tty是将脚本作为启动么,能分享下思路吗

@fancylife 运行效率低了好多 而且代码量特别大 到项目后期都不好维护了

1.核心代码迁往服务端做成接口来调。 2.用c++或go或python编译,通过命令行来调。

我觉得这是股歪风。

两年前的贴。。。 自己fork一份Node.js的代码,修改解析JS文件的逻辑,在读取项目文件的时候使用私钥解密文件内容,编译成一个你们自己的Node.js发行版,比如叫Code.js。 用普通的Node.js开发测试代码,搞定后用公钥将文件加密成二进制文件,加上你们的Code.js卖给代理商。

不知道Docker内部可以不可以用加密文件系统,然后再加个密码,用密码才能登陆进去操作?这样还省事了。。。

Compiling your Node.js application into a single executable with dynamic require and all fs.* API support.

https://github.com/pmq20/node-compiler

有一个办法一定有效,nwjs可以编译代码为二进制的,你可以把代码放到nwjs里运行; 1、nwjs不一定是在windows上运行,还可以支持linux; 2、nwjs不一定非得有界面,无界面的后端服务一样可以支持; 3、将核心代码编译成native code,其他的直接给代码;nwjs运行支持;

回到顶部