我想在我的下一个项目中使用 node.js,但我的老板不喜欢我们的竞争对手可以阅读源代码。
有没有办法保护 JavaScript 代码?
我想在我的下一个项目中使用 node.js,但我的老板不喜欢我们的竞争对手可以阅读源代码。
有没有办法保护 JavaScript 代码?
您可以使用节点的 NativeExtension 完成此操作
您将有一个boostrap.js
为 .jse 文件添加扩展处理程序的文件
// register extension
require.extensions[".jse"] = function (m) {
m.exports = MyNativeExtension.decrypt(fs.readFileSync(m.filename));
};
require("YourCode.jse");
YourCode.jse
将是您的源代码的加密版本(解密密钥不会以纯文本形式存在,因为解密过程发生在本机扩展中)。
现在您有了 NativeExtensionsdecrypt
函数,可以将源代码转换回 javascript。只需让您的构建过程创建.jse
所有文件的加密版本并将其发布给您的客户。他们还需要本机扩展,但现在您已经使修改代码变得更加困难而无需太多努力。您甚至可以让本地扩展回电并检查许可证信息以帮助防止盗版(请记住,这不会阻止盗版,没有解决方案)。
只需包括一个许可协议并给他们源代码。无论如何,他们可能想要自定义它。
因为我刚刚在 80 多个文件中完成了一个巨大的纯 Nodejs 项目,所以我遇到了与 OP 相同的问题。我的辛勤工作至少需要最低限度的保护,但 NPMjs 操作系统社区似乎没有涵盖这个非常基本的需求。雪上加霜 JXCore 包加密系统上周在几个小时内就被破解了,所以回到混淆......
所以我创建了完整的解决方案,处理文件合并、丑化。您可以选择不合并指定的文件/文件夹。然后将这些文件复制到合并文件的新输出位置,并自动重写对它们的引用。
PS:如果人们愿意做出贡献,让它变得更好,我会很高兴。这是小偷和像你这样努力工作的程序员之间的战争。让我们一起加油,增加逆向工程的痛苦!
非常清楚,客户端 Javascript(从远程服务器下载到标准 Web 浏览器中)无法防止查看和/或修改,无论您如何混淆它,因为原始源的重建(“去混淆”)在技术上是微不足道的。(Javascript混淆只是广泛使用的安全误称“通过默默无闻的安全”的另一个例子。)
如果您希望使用 Javascript 和 Node.js 来提供受保护的“产品”(在这种情况下是指需要在您的公司无法控制的服务器上安装的应用程序或服务),您也不能将其作为唯一可用的选项来保护您(混淆)不提供此类保护。
应该注意的是,即使您的产品是作为二进制可执行文件提供的,也不能保证您可以保护它所包含的知识产权,因为任何二进制文件都可以反编译为可理解的格式。在这种情况下,基于将低级机器代码(由反编译提供)转换为现代编程语言使用的高级逻辑结构所需的过多资源(时间/专业知识),我们享有一定程度的安全性。(这来自曾经将 CP/M 反编译成对其内部设计的理解的人。;)
然而,一切都没有丢失:如果我们假设可以以编程方式保护知识产权(陪审团仍在此问题上),则有一种方法可以以安全的方式提供基于 Node.js 的产品,但它不适用于技术上不冒险,因为它需要对 Node.js 源代码进行大量重构(添加对加密安全库的支持,并删除——或以其他方式保护——您的专有库的对象反射。)
服务器端 javascript 代码是完全封闭的源代码。没有人能读懂。
客户端 javascript 代码是完全开源的。每个人都可以阅读它。
对于后者,您无能为力,但同样适用于 RoR、ASP.NET、PHP 等。
除非您公开提供,否则实际的服务器代码是关闭的。
如果您制作了一个库并试图将其作为第 3 方来源出售,那么它是开放的并且可能被盗。当然,您可以起诉他们侵犯版权。
有很多像extjs这样的大公司出售可能被盗的库,这就是为什么他们实际上向您出售的是代码和支持服务。
大多数建立在节点上的商业项目都是服务。