Van*_*ing 53 javascript source-code-protection node.js
我想在我的下一个项目中使用node.js,但我的老板不喜欢我们的竞争对手可以阅读源代码.
有没有办法保护JavaScript代码?
Chr*_*ini 63
您可以使用NativeExtension for node完成此操作
您将有一个boostrap.js文件为.jse文件添加扩展处理程序
// register extension
require.extensions[".jse"] = function (m) {
m.exports = MyNativeExtension.decrypt(fs.readFileSync(m.filename));
};
require("YourCode.jse");
Run Code Online (Sandbox Code Playgroud)
YourCode.jse 将是您的源代码的加密版本(解密的密钥不会是纯文本中的任何地方,因为解密过程发生在本机扩展中).
现在,您的NativeExtensions decrypt函数将源转换回javascript.只需让您的构建过程创建.jse所有文件的加密版本,然后将其发布给您的客户.他们还需要原生扩展,但现在你已经更难以修改代码了.您甚至可以将原生分机呼叫置于家中并检查许可证信息以帮助防止盗版(请记住,这不会阻止盗版,没有解决方案).
Mik*_*ord 17
只需包含许可协议并为其提供源代码即可.无论如何,他们可能想要自定义它.
use*_*976 10
由于我刚刚在80多个文件中完成了一个巨大的纯Nodejs项目,因此我遇到了与OP相同的问题.我至少需要对我的辛勤工作提供最低限度的保护,但NPMjs OS社区似乎没有涵盖这个非常基本的需求.添加盐对伤害JXCore包加密系统上周在几个小时内被破解,所以回到混淆...
所以我创建了完整的解决方案,处理文件合并,uglifying.您可以选择从合并中省略指定的文件/文件夹.然后将这些文件复制到合并文件的新输出位置,并自动重写对它们的引用.
PS:如果人们愿意做出更好的贡献,我会很高兴的.这是小偷和像你一样的辛勤工作者之间的战争.让我们加入我们的力量,增加逆向工程的痛苦!
要非常清楚,无论您如何对原始源的重建("去混淆")进行模糊处理,都无法保护客户端Javascript(从远程服务器下载到标准Web浏览器中)不被查看和/或修改在技术上是微不足道的.(Javascript混淆只是广泛使用的安全误称"通过默默无闻的安全性"的另一个例子.)
如果您希望使用Javascript和Node.js来提供受保护的"产品"(在此上下文中是需要在您公司无法控制的服务器上安装的应用程序或服务),您无法将其作为唯一可用的选项来保护你(混淆)没有提供这样的保护.
应当指出的是,即使你的产品提供的二进制可执行文件是不能保证你可以保护它包含的任何二进制可以反编译成一个可以理解的格式的知识产权.在这种情况下,我们基于将低级机器代码(由反编译提供)转换为现代编程语言所使用的更高级逻辑结构所需的过多资源(时间/专业知识),享受某种程度的安全性.(这是一个曾经反过来将CP/M反编译成对其内部设计的理解的人.)
然而,所有这一切都没有丢失:如果我们假设一个人可以以编程方式保护知识产权(陪审团仍然在这个问题上),那么有一种方法可以以安全的方式提供基于Node.js的产品,但它不适用于技术上没有冒险性,因为它需要对Node.js源代码进行大量重构(添加对加密安全库的支持,并删除 - 或以其他方式保护 - 专有库的对象反射.)
服务器端的javascript代码是完全封闭的源代码.没有人可以阅读它.
客户端javascript代码是完全开源的.每个人都可以阅读.
对于后者,你什么都不做,但同样适用于RoR,ASP.NET,PHP等.
除非您公开使其可用,否则将关闭实际的服务器代码.
如果您制作图书馆并尝试将其作为第三方来源出售,那么它就会被打开并且可能被盗.当然,您可以起诉他们侵犯版权.
有各种大公司,如extjs,它们可以销售可能被盗的图书馆,这就是为什么他们实际上卖给你的是代码和支持服务.
大多数基于节点的商业项目都是服务.
JXcore(node.js 0.11.X发行版)具有自己的JX打包功能,可保护源代码和资产.您甚至可以选择是否可以从其他应用程序使用该特定包.(独立OR库)
假设您有许多JS等文件,并且您的模块的入口点是这样的;
exports.doThis = function() { ...... };
Run Code Online (Sandbox Code Playgroud)
如果你只是调用下面的方法并将其编译为JX包,源代码将是安全的.
jxcore.utils.hideMethod(exports.doThis);
Run Code Online (Sandbox Code Playgroud)
这是(方法隐藏)只需要输入文件,因为所有其他子JS文件都无法从调用应用程序访问.
您需要JXcore来运行JX包.
有关更多信息,请访问JXcore
| 归档时间: |
|
| 查看次数: |
71697 次 |
| 最近记录: |