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


当前回答

你可以随心所欲地混淆javascript源代码,但它总是可以通过要求所有源代码实际运行在客户端机器上进行逆向工程…我能想到的最好的选择是用服务器端代码完成所有的处理,而javascript所做的所有客户端代码都是向服务器本身发送处理请求。否则,任何人都将始终能够跟踪代码正在执行的所有操作。

有人提到base64是为了保证字符串的安全。这是个糟糕的主意。Base64可以立即被那些想要对你的代码进行反向工程的人识别出来。他们要做的第一件事就是解编码,看看是什么。

其他回答

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

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

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

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

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

Dean Edward's Packer是一个很好的混淆器,尽管它主要是混淆代码,而不是代码中可能存在的任何字符串元素。

参见:在线Javascript压缩工具,并从下拉菜单中选择Packer (Dean Edwards)

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

和律师谈谈知识产权法以及你的法律选择。“开源”并不意味着“人们可以阅读源代码”。相反,开源是一种特定的许可模型,允许自由使用和修改您的代码。如果您不授予这样的许可证,那么复制您的代码的人就是违法的,(在世界上大多数地区)您可以通过法律手段阻止他们。

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

点击这里查看我关于混淆器的完整回答。

我正在使用闭包编译器实用程序的java脚本混淆。它减少了代码,并为混淆提供了更多的选项。 此实用程序可在谷歌代码在以下URL: 闭包的工具

但是现在我听到很多关于UglifyJS的消息。你可以在闭包编译器和UglifyJS之间找到各种比较,其中Uglify似乎是赢家。 UglifyJS:一种可以与闭包媲美的快速Node.js压缩器

很快我就给了UglifyJS机会。

困惑:

试试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是一个很好的替代方案。