我想制作一个非开源的 JavaScript 应用程序,因此我想学习如何混淆我的 JS 代码?这可能吗?
如何混淆(保护)JavaScript?[关闭]
混淆:
试试YUI 压缩器。它是一种非常流行的工具,由 Yahoo UI 团队构建、增强和维护。
你也可以使用:
UPDATE: This question was originally asked on 2008, and The mentioned technologies are deprecated. you can use:
私有字符串数据:
保持字符串值私有是一个不同的问题,混淆不会真正有多大好处。当然,通过将您的源代码打包成一个乱码、缩小的混乱,您可以通过默默无闻获得一个轻量级的安全性。大多数情况下,查看源代码的是您的用户,并且客户端上的字符串值是供他们使用的,因此这种私有字符串值通常不是必需的。
如果你真的有一个你不想让用户看到的价值,你会有几个选择。首先,您可以进行某种加密,在页面加载时解密。这可能是最安全的选择之一,但也会进行大量不必要的工作。您可能可以对一些字符串值进行 base64 编码,这会更容易……但是真正想要这些字符串值的人可以轻松地对它们进行解码。加密是真正防止任何人访问您的数据的唯一方法,大多数人发现加密比他们需要的更安全。
边注:
众所周知,Javascript 中的混淆会导致一些错误。混淆器在这方面做得更好一些,但许多机构认为他们从缩小和gzip压缩中看到了足够的好处,并且混淆的额外节省并不总是值得的。如果您试图保护您的源代码,也许您会认为值得您花时间,只是为了让您的代码更难阅读。JSMin是一个不错的选择。
我很惊讶没有人提到 Google 的Closure Compiler。它不只是缩小/压缩,它还分析以查找和删除未使用的代码,并重写以实现最大程度的缩小。它还可以进行类型检查并警告语法错误。
JQuery 最近从 YUI Compresser 切换到 Closure Compiler,并且看到了“稳固的改进”
混淆永远不可能真正起作用。对于任何真正想要了解您的代码的人来说,这只是一个减速带。更糟糕的是,它使您的用户无法修复错误(并将修复程序发回给您),并使您更难在现场诊断问题。这是浪费你的时间和金钱。
与律师讨论知识产权法以及您的法律选择。“开源”并不意味着“人们可以阅读源代码”。相反,开源是一种特殊的许可模式,授予自由使用和修改代码的权限。如果你不授予这样的许可,那么复制你的代码的人就是违法的,并且(在世界上的大部分地区)你有合法的选择来阻止他们。
真正保护代码的唯一方法是不发布它。将重要的代码移至服务器端,并让您的公共 Javascript 代码对其进行 Ajax 调用。
您可以随心所欲地混淆 javascript 源代码,但由于要求所有源代码在客户端计算机上实际运行,因此它始终是可逆向工程的……我能想到的最佳选择是完成所有处理使用服务器端代码,所有客户端代码 javascript 所做的就是将处理请求发送到服务器本身。否则,任何人都将始终能够跟踪代码正在执行的所有操作。
有人提到使用 base64 来保证字符串安全。这是一个可怕的想法。想要对您的代码进行逆向工程的人可以立即识别 Base64。他们要做的第一件事就是解开它的编码,看看它是什么。
有许多免费的 JavaScript 混淆工具;但是,我认为需要注意的是,很难将 JavaScript 混淆到无法进行逆向工程的程度。
为此,我在某种程度上使用了几种加班方式:
YUI 压缩机。Yahoo! 的 JavaScript 压缩器在压缩代码以改善其加载时间方面做得很好。有一个小程度的混淆效果相对较好。本质上,Compressor 将更改函数名称、删除空格并修改局部变量。这是我最常使用的。这是一个基于 Java 的开源工具。
JSMin是由 Douglas Crockford 编写的工具,旨在缩小您的 JavaScript 源代码。用 Crockford 自己的话来说,“JSMin 不会混淆,但会丑化。” 它的主要目标是缩小源的大小,以便在浏览器中更快地加载。
免费的 JavaScript 混淆器。这是一个基于 Web 的工具,它试图通过实际编码来混淆您的代码。我认为其编码(或混淆)形式的权衡可能以文件大小为代价;然而,这是个人喜好的问题。