CNode

如何保密nodejs工程的代码?

问答
Wwf744发布于11 年前最后回复9 年前32 回复32012 浏览0 收藏

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

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

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

回复 (32)

F
fancylife#1·11 年前

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

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

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

F
fancylife#3·11 年前

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

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

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

S
sleelily#4·11 年前

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

W
wf744#5·11 年前
引用 fancylife1.代码多了,影响nodejs的运行效率? 是的,的确会影响性能,毕竟压缩混淆过了。 2.出错时,这个出错的栈信息比正常没有经过混淆的增加调试的复杂度。 混淆过的代码几乎无可读性了,日志中的错...

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

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

C
coordcn#7·11 年前

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

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

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

W
wf744#8·11 年前
引用 coordcn看什么样的代码,我的观点是基础设施开源,核心业务代码闭源。 如果你的代码仅仅是对基础设施进行更改,加上一些非核心的业务代码,比如数据库操作什么的,你给源代码,人家还懒得看呢。 核心业务代码,比...

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

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

H
hoozi#9·11 年前

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

H
hoozi#10·11 年前

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

F
fantasyni#11·11 年前

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

P
pro-w-xuan#12·11 年前

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

Y
ystyle#13·11 年前

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

J
jiyinyiyong#14·11 年前

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

N
nodejser#15·11 年前

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

N
nodejser#16·11 年前

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

J
JacksonTian#17·11 年前

jxcore看看

M
mrluoming#18·10 年前

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

R
richenlin#19·10 年前

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

S
somax#21·9 年前
E
Einsy#24·9 年前

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

2
2YANG#25·9 年前

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

G
gzhangzy#26·9 年前

我觉得这是股歪风。

L
libook#27·9 年前

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

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

D
DavidCai1993#28·9 年前

以前尝试折腾过一次。。:https://cnodejs.org/topic/57c4cc23a6539d6525575225

P
pmq20#29·9 年前

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

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

W
wf744#30·11 年前
引用 fantasyni自己实现一个 require 吧,这个require是先进行解密,然后调用nodejs require,js 文件可以加密成对应的加密文件,这样子执行的其实还是原文件,log都是正常的 一般来...

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

H
haozxuan#32·11 年前

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

参与回复
登录后即可参与回复。登录