node.js – 代码保护?

我想在下一个项目中使用node.js,但是我的老板不喜欢我们的竞争对手可以读取源代码。

有没有一种方法来保护JavaScript代码?

您可以使用NativeExtension for node来完成此操作

你会有一个boostrap.js文件,为.jse文件添加一个扩展处理程序

 // register extension require.extensions[".jse"] = function (m) { m.exports = MyNativeExtension.decrypt(fs.readFileSync(m.filename)); }; require("YourCode.jse"); 

YourCode.jse是你的源代码的encryption版本(因为解密过程发生在本地扩展中,所以解密的密钥不会是纯文本的任何地方)。

现在,您的NativeExtensions decrypt函数将源代码转换回javascript。 只需让您的构build过程创build所有文件的encryption.jse版本并将其发布给您的客户。 他们也需要本地扩展,但是现在你已经做了一点点修改你的代码没有太多的努力。 你甚至可以把原生扩展电话打回家,并检查许可证信息,以防止盗版(记住这不会阻止盗版,没有解决scheme)。

只需包含一个许可协议,并给他们的源代码。 他们可能想要自定义它。

非常清楚的是,无论您如何对其进行混淆,客户端Javascript(从远程服务器下载到标准Web浏览器)都无法保护,无法查看和/或修改,因为原始来源的重构(“去混淆”)在技​​术上是微不足道的。 (JavaScript混淆只是被广泛使用的安全误称“通过隐晦的安全性”的另一个例子。)

如果您希望使用Javascript和Node.js来提供受保护的“产品”(在这种情况下,应用程序或服务需要安装在您的公司无法控制的服务器上),则无法将其作为唯一可用的选项你(混淆)不提供这样的保护。

应该指出的是,即使您的产品是作为二进制可执行文件提供的,但不能保证您可以保护其包含的知识产权,因为任何二进制文件都可以反编译为可理解的格式。 在这种情况下,基于将低级机器代码(如反编译提供的)转换为现代编程语言所使用的更高级别的逻辑结构所需的过多资源(时间/专业知识),我们享有一定程度的安全性。 (这个从一个曾经把CP / M反编译成手工理解其内部devise的人;)

所有这些都不会丢失:如果我们假设可以通过编程的方式来保护知识产权(陪审团仍然在这个问题上),有一种方法可以以安全的方式提供基于Node.js的产品,但不是在技​​术上没有冒险精神,因为它需要对Node.js源代码进行大量的重构(添加对encryption安全库的支持以及为专有库删除或保护对象reflection)。

因为我刚刚在80多个文件中完成了一个巨大的纯Nodejs项目,所以我和OP有同样的问题。 我的努力工作至less需要一点点保护,但NPMjs操作系统社区似乎还没有涵盖这个非常基本的需求。 join盐伤害JXCore包encryption系统上周在几个小时内被破解,所以回到混淆… … –

所以我创build了完整的解决scheme,处理文件合并,uglifying。 您也可以select忽略指定的文件/文件夹以及合并。 然后将这些文件复制到合并文件的新输出位置,并将其引用重写为自动。

节点uglifier的NPMjs链接

Github的node-uglifier的repo

PS:我会很高兴,如果人们会做出更好的贡献。 这是盗贼和自己努力工作的打字员之间的战争。 让我们join我们的力量,增加逆向工程的痛苦!

服务器端JavaScript代码是完全封闭的源代码。 没有人可以阅读。

客户端JavaScript代码是完全开源的。 每个人都可以阅读。

对于后者,你什么都不能做,但是同样适用于RoR,ASP.NET,PHP等等。

除非您公开使其可用,否则实际的服务器代码将被closures。

如果你制作一个图书馆,并试图将其作为第三方来源出售,那么它是开放的,可以被盗取。 当然你可以起诉他们的版权违约。

有像extjs这样的大公司出售图书馆可能被盗,这就是为什么他们实际上出售你的代码和支持服务。

大多数build在节点上的商业项目都是服务。

JXcore (node.js 0.11.X发行版)具有自己的JX打包function,可以保护源代码和资产。 您甚至可以select是否可以从其他应用程序使用该特定软件包。 (独立OR库)

假设你有很多JS等文件,并且你的模块的入口点是这样的;

 exports.doThis = function() { ...... }; 

如果您只是简单地调用下面的方法并将其编译为JX包,则源代码将是安全的。

 jxcore.utils.hideMethod(exports.doThis); 

这是(方法隐藏)将只需要入口文件,因为所有其他子JS文件无法从调用应用程序到达。

你需要JXcore来运行JX包。

更多信息可从JXcore获得

将你的核心逻辑打包到模块中,这些模块可以通过Google的封闭来实现 。 作为构build过程的一部分,您甚至可以将其作为Grunt任务来完成。

这是一个古老的问题,但值得指出。 注意:你所做的任何事情都不能真正隐藏你的代码,但是也不会有任何通过.Net(C#)或者Java发布的东西。 一般来说,简单地使用一个像uglify这样的工具或者闭包应该就足够了。 通过模块化和使用闭包,你实际上可以做很多优化,否则将是困难的。

您可以使用EncloseJS – 编译器为node.js项目。 它确实将JavaScript编译为本地代码,并且您的源代码不包含在二进制文件中。

您可以使用packer for nodejs来混淆您的脚本…

你绝对不能确定没有人能够读取你的代码。 你可以使用混淆或缩小,这可以使解码代码变得非常困难。 混淆器/缩小器的一个例子就是Google的JavaScript Closure编译器 。

我有个主意。 保护cppjava应用程序而不是js。

  1. 用encryption格式包装你的代码,并将其编译为utf-8文件资源。
  2. 使用你的cppjava应用程序将整个file upload到一台linux pcarm computer ,确保你有一个强大的密码或closuresssh port或禁用video端口,只能通过web浏览linux pc。
  3. 有一个cpp程序来解密linux pc中的文件。
  4. 开发一个Web服务器来控制你的Linux PC。

所以这就像一个黑匣子,客户端对你的代码无能为力。