[eggjs/egg]如何进行代码保护

2024-08-05 115 views
4

一开始使用 c# 编写程序,发布之后部署,不用考虑源代码泄露 ,即使能反编译出来也有一定的编程基础,后来发现nodejs 还不错, 从node v6.x.x 版本开始迁移项目,再到node v8 es6能使用 async 跳出无限callback ,再发现有egg 这个阿里大神的框架 就更开心了,但是突然发现一个问题 :那就是源代码保护!!! 之前都是搭建在自己的服务器上,现在需要在客户的服务器上搭建,问题就来了

能不能提供一个 工具 如:egg-publish,运行一下 对配置目录下的代码进行加密,产生证书含有到期时间,运行开始解密,之后也不会影响程序运行效率,到期更换证书就行

回答

2

源码保护不属于 Egg 的职责,可以看下 Node 社区有什么解决方案。

另外也可以关注下 v8 最新的那个 code cache。

cc @gxcsoccer @hyj1991

0

看什么样的代码,我的观点是基础设施开源,核心业务代码闭源。 如果你的代码仅仅是对基础设施进行更改,加上一些非核心的业务代码,比如数据库操作什么的,你给源代码,人家还懒得看呢。 核心业务代码,比如排料算法,行业相关算法等,这些用 C 或者 C++ 写 addon,给 node 调用,这样在保密和性能上都能保证。

以前看到有同学这么说的,我感觉蛮有道理的。实际上你强行给 js 代码混淆加密后,有一个问题是你还得搞个 source map 来映射混淆加密后的代码和你的源文件之间的关系,要不然客户错误你都不知道怎么排查

5

code cache 也是要源代码的 @atian25

8

code cache 也是要源代码的 @atian25

T_T

1

这个思路可行不: 比如 app/service 下的文件是 被对称加密了一次了 启动程序进行一次证书及时间的验证 在require 模块的时候 进行解密加载 这样只有在启动的时候慢点,并不会影响运行效率吧

8

你的源码都部署在人家那里了。。。解密函数也是源码的一部分,攻击者手动调用一次解密不就行了

6

解密那块 可以用c 或者python 做 读取本地证书 及时间 或者请求认证接口 解密 主要考虑是不直接暴露代码,c# 如果不特殊处理,也可以被反编译

3

他可以完全修改 loader 那段代码,在解密后面加一个 writeFile,还不如直接 uglyfiy

4

讨论至此,没有完美的加密方案。最好是把服务 saas 化,否则就考虑你产品的核心竞争力,不把核心代码放出来。就算客户无法解出你的代码,也可以拿这个副本去部署赚钱。

3

很简单啊 打个exe包就好了,可以直接连node环境一起打包进去, electron nexe等都可以的.客户也不会去解你的包

7

@JesseWeb 没那么容易的,require 的寻址等问题。