因为你的浏览器需要它来执行,所以你无法隐藏它。就是这么简单。
你需要明白它是在客户端执行的脚本。它没有编译(也就是说它不是二进制(0和1的机器语言))。所以它是可以自由阅读的。
尽管如此,你可以使用像 YUI compressor 这样的工具来混淆它。
基本上,这种工具会删除额外的空格、制表符、换行符,重命名方法(比如将方法“a”表示为“MyShinyMethodWhoMakesNiceStuff”)和变量。这使得代码非常难以阅读和理解。因此,逆向工程更难实现。
有些人使用一些技巧,比如base64或其他编码和解码部分的代码与函数一起使用,但这只是技巧,无法欺骗眼光敏锐的人。
通过混淆,您可以让人们花费更多时间分析您的代码和窃取,因此窃取变得更加复杂,需要时间。假设您制作了一个不错的JavaScript插件,可以将所有白色背景变为紫色(好吧,这不是很好的例子,但只是为了有一个形象的例子)。有人可能想要窃取它,并将其改为蓝色而不是紫色。如果代码被混淆,他可能会认为复制您的想法并使用自己的代码和蓝色背景重新编写它更容易,比反向工程和理解您的代码更省时间,在未来也更容易维护。最终,他将“只”窃取您的想法而不是您的代码。http://demos.pixelworkshop.fr/circular_countdown_cc/js/jquery.js
如果您正在按每个站点的方式对代码进行许可,我建议在Javascript中进行域锁定。
您可以通过在加密文件的某个地方检查window.location来自行完成此操作。这并不会非常安全,但对于90%的用户而言,他们只需将脚本放入目录中并希望它能正常工作,它将提供一定程度的威慑作用。
您还可以使用https://domainlockjs.com(免费)轻松锁定脚本到域名。这是一个稍微更好的解决方案,因为DomainLockJS会引发难以跟踪的错误,并且很难进行调试。
更复杂的方法涉及使用Ajax脚本注入,并允许特定的域名访问脚本/不触发XSS错误。这是最难设置的方法,但是如果您注入大量JS,则可能最难绕过。
然而,所有这些都可以被熟练的编码人员规避...您只是使事情变得困难,而不是不可能。
Liblock是我自己构建的一个小工具。它加密你的JS源代码 - 这不是简单的混淆,而是通过加密来提供良好的安全性。
当你在客户端检查DOM时,你所看到的只是每个绑定到HTML头部的脚本的 "nplreq(url)"。
在这里可以看到它的工作原理 liblock-demo - 这仅仅是一个用于隐藏 "nopro_lib" 和 "xscroll.js" 脚本的演示。
加密和解密对浏览器来说完全透明。它经过了在PC上测试的Firefox、Chrome、Opera、Konqueror、IE8-10,以及在Android平板上测试的Dolphin和Safari验证。
源代码被安全地隐藏起来,只有经过巨大努力才能再次显露出来。加密采用AES(Rijndael 256),使用一次性密钥,客户端与(liblock-)服务器之间使用Diffie-Hellman协商生成。
$('script')
就足以打破这里的安全性。 - Denys Séguret
jquery.js
文件中,只要它在客户端,就无法隐藏它。 - Arthur