协慌网

登录 贡献 社区

如何混淆(保护)JavaScript?

我想制作一个非开源的 JavaScript 应用程序,因此我想学习如何混淆我的 JS 代码?这可能吗?

答案

混淆:

尝试使用YUI Compressor 。这是一个非常流行的工具,由 Yahoo UI 团队构建,增强和维护。

您还可以使用:

更新:这个问题最初是在 10 多年前提出的,并且不再维护 YUI。 Google Closure 编译器仍在使用中,并且可以通过节点包管理器在本地运行 UglifyJS: npm install -g uglify-js

私有字符串数据:

将字符串值保持私有是另一个问题,而混淆并不会真正带来太大好处。当然,通过将源打包成乱码,最小的混乱,可以通过模糊性获得轻便的安全性。在大多数情况下,查看源的是您的用户,并且客户端上的字符串值是供他们使用的,因此通常不需要这种私有字符串值。

如果您确实拥有一个您不希望用户看到的价值,那么您将有两个选择。首先,您可以进行某种加密,该加密在页面加载时解密。那可能是最安全的选择之一,但也可能是很多不必要的工作。您可能可以对一些字符串值进行 base64 编码,这会更容易.. 但是真正想要这些字符串值的人可以轻松地对其进行解码。加密是真正阻止任何人访问您的数据的唯一方法,大多数人发现加密比他们需要的安全性更高。

边注:

众所周知,JavaScript 中的混淆会导致一些错误。混淆器对此有所改善,但是许多公司认为他们发现缩小压缩后会获得足够的好处,而增加混淆所带来的节省并不总是值得解决的。如果您想保护自己的源代码,也许您会认为值得这样做,只是使您的代码更难阅读。 JSMin是一个很好的选择。

我很惊讶没有人提到 Google 的Closure Compiler 。它不仅会缩小 / 压缩,还会进行分析以查找和删除未使用的代码,并进行重写以实现最大程度的缩小。它还可以进行类型检查并警告语法错误。

JQuery 最近从 YUI Compresser 切换到 Closure Compiler,并且看到了 “坚实的进步

混淆永远无法真正起作用。对于任何真正想要获取您的代码的人来说,这只是一个减速。更糟糕的是,它使您的用户无法修复错误(并将修复发送回给您),并使您更难于在现场诊断问题。这浪费了您的时间和金钱。

与律师谈谈知识产权法以及您的法律选择是什么。 “开放源代码”并不意味着 “人们可以阅读源代码”。相反,开放源代码是一种特殊的许可模型,授予许可自由使用和修改您的代码。如果您不授予此类许可,那么复制您的代码的人将受到侵犯,并且(在世界大多数地方)您可以通过法律选择予以阻止。

真正保护代码的唯一方法是不发布代码。将重要的代码移到服务器端,并让您的公共 Javascript 代码对它进行 Ajax 调用。

在这里查看有关混淆器的完整答案。