混淆和压缩的区别是什么?哪个更安全?

17

最近,我的客户要求我混淆JavaScript代码以隐藏API密钥。我使用Grunt。

grunt-contrib-uglify能够混淆我的JavaScript代码吗?

uglify和obfuscate有什么区别?它们中的一个比另一个更安全吗?


2
我认为你会发现这两种方法都会暴露API密钥,尽管稍微难以辨别一些。 - David Thomas
1
Uglify可以进行代码压缩,但它不会进行闭包编译和变量名替换,也不会进行混淆。此外,混淆并不能提高安全性。 - MildlySerious
2
我认为通常情况下,混淆至少在某种程度上可以提高安全性,因为有能力攻击软件的人会更少,或者需要花费更多时间攻击软件。我同意有一些特殊情况,比如搜索某个字符串的存在,混淆可能没有任何区别。我也不会声称混淆不能通过努力被还原。但是,如果您的目标是使人们难以理解或修改算法,那么我认为混淆确实可以“提高安全性”。 - John
1个回答

15

Uglify是一个代码压缩工具。它解析JS代码,构建代码的令牌树,然后可以用于压缩/缩小代码或“美化”代码,以便于调试等。

另一方面,使用类似Stephen Mathieson的Obfuscator这样的混淆工具可以将多个项目文件合并成一个,捆绑需要和打包。在这种情况下,它还会在最后对整个作业进行Uglify处理,生成混淆、缩小的JS文件。虽然不是100%安全的,因为有方法可以反混淆JS代码,但相比于明文文本,这使得代码更难以解密。

然而,我建议尽可能避免将客户端API密钥放在浏览器端代码中。即使它被混淆了,也仍然可能被发现。


3
据我了解,Stephen Mathieson的混淆器实际上使用UglifyJS作为其代码混淆的方法。 - antfx
@antfx 感谢你提醒,我之前误以为这其中还有更多内容,而Uglify只是其中的一部分。 - Isaac
1
我最近几天一直在尝试使用js-obfuscator,它似乎很擅长混淆代码而不仅仅是丑化 https://www.npmjs.com/package/js-obfuscator - antfx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接