如何保密nodejs工程的代码?
发布于 24天前 作者 wf744 461 次浏览 来自 问答

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

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

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

我们团队当初采用的方式:给所有后端代码压缩混淆发布出一个新的工程,达到不能正常维护的标准。 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。

回到顶部