我想做一个JavaScript应用程序,不是开源的,因此我希望学习如何可以混淆我的JS代码?这可能吗?


当前回答

你不能保护客户端代码:只需在谷歌Chrome上按F12,暂停javascript执行,你就会得到所有的字符串,即使是那些加密的。美化它和重命名变量,你会得到几乎原始的代码。

如果你正在编写服务器端javascript(即NodeJS),害怕有人入侵你的服务器,并想让黑客的工作更加困难,给你更多的时间来取回你的访问权限,那么使用javacript编译器:

你需要在高级编译中使用闭包编译器,因为它是唯一重命名所有变量的工具,即使这些变量在多个文件/模块中使用。但它有一个问题:它只有在你用它的编码风格写的时候才能工作。

其他回答

困惑:

试试YUI压缩机。这是一个非常流行的工具,由Yahoo UI团队构建、增强和维护。

你也可以使用:

闭包编译器 UglifyJS

更新:这个问题最初是在2008年提出的,并且所提到的技术已弃用。你可以使用:

Terser -更多信息在web.dev。

私有字符串数据:

保持字符串值为私有是另一个问题,混淆不会有太大的好处。当然,通过将您的源代码打包到一个混乱的、最小化的混乱中,您可以通过模糊获得轻量级的安全性。大多数情况下,是您的用户在查看源代码,客户端上的字符串值是为他们使用的,因此通常不需要那种私有字符串值。

If you really had a value that you never wanted a user to see, you would have a couple of options. First, you could do some kind of encryption, which is decrypted at page load. That would probably be one of the most secure options, but also a lot of work which may be unnecessary. You could probably base64 encode some string values, and that would be easier.. but someone who really wanted those string values could easily decode them. Encryption is the only way to truly prevent anyone from accessing your data, and most people find that to be more security than they need.

Sidenote:

众所周知,Javascript中的混淆会导致一些错误。混淆者在这方面做得越来越好,但许多公司认为他们从缩小和gzipping中看到了足够的好处,而混淆所带来的额外节省并不总是值得麻烦。如果您试图保护您的源代码,也许您会认为这是值得的,只是为了让您的代码更难阅读。JSMin是一个很好的替代方案。

解释型语言的问题在于,你要发送源代码才能让它们工作(除非你有一个字节码的编译器,但话说回来,反编译是相当简单的)。

因此,如果您不想牺牲性能,您只能对变量和函数名进行操作,例如。用a, b…aa、ab……或者a101 a102等等。当然,尽可能多地删除空间/换行符(这就是所谓的JS压缩器所做的)。 如果您必须实时加密和解密字符串,那么混淆字符串将会对性能造成影响。加上一个JS调试器可以显示最终值…

你试过香蕉脚本吗?它生成高度压缩且完全不可读的代码。

非开源的基于javascript的应用程序是相当愚蠢的。Javascript是一种客户端解释语言。混淆不是什么保护…

JS混淆通常是为了减少脚本的大小,而不是“保护”它。如果你不希望你的代码是公开的,Javascript不是正确的语言。

市面上有很多工具,但大多数都有“压缩器”(或“迷你器”)的名字。

我已经使用Jasob多年了,它无疑是最好的混淆器。 它有一个高级的用户界面,但仍然直观和易于使用。 它还可以处理HTML和CSS文件。

使用它的最好方法是给所有私有变量加上下划线之类的前缀,然后使用排序功能将它们组合在一起,并将它们作为混淆的目标进行检查。

用户仍然可以查看您的源代码,但是当您的私有变量从_sUserPreferredNickName转换为。

该引擎将自动统计目标变量的数量,并优先考虑它们以获得最大的压缩。

我不是为雅各布工作,我从推销他们中得不到任何东西,只是提供一些友好的建议。 缺点是它不是免费的,而且有点贵,但与其他选择相比还是值得的——“免费”选项甚至无法相提并论。