实际上我正在开发一个Chrome扩展程序和一个jQuery插件来上传它并在Codecanyon上出售。当我“检查页面的源代码”并单击“资源”选项卡时,javascript文件看起来是空的。 Codecanyon是如何做到的?我想在我自己的网站上也有防盗文件,但我不知道怎么做。我知道php和javascript并没有方法可以做到这一点,因为浏览器会下载文件来执行它。
您可以看到示例here。
答案 0 :(得分:36)
您无法隐藏它,因为您的浏览器需要它来执行它。就这么简单。
您需要了解它是在客户端执行的脚本。它没有编译(意味着它不是二进制(0和1机器语言))。所以它可以自由阅读。
尽管如此,您可以使用YUI compressor
等工具对其进行模糊处理基本上这种工具删除额外的间距,制表符行返回和重命名方法(如方法“a”代表“MyShinyMethodWhoMakesNiceStuff”)和变量。这使得阅读和理解代码变得非常困难。因此,逆向工程难以实现。
有些人使用一些技巧,比如base64或其他编码和解码部分代码的功能,但它只是技巧,不会愚弄敏锐的眼睛。
通过混淆,你会让人们花更多的时间来分析你的代码,因此盗窃要复杂得多,而且需要时间。假设您制作了一个漂亮的javascript插件,使每个白色背景都呈紫色(好吧,不是那么好的例子,但仅用于制作成像示例)。有人可能想偷它而不是紫色。如果代码被混淆了,他可能会认为更容易复制你的想法并用他自己的代码和蓝色背景自己重写它,这将花费他比逆向工程师更少的时间和理解井,更容易维护。最后,他将“只”“窃取”你的想法,而不是你的代码。
我认为最终,这只是时间问题。
答案 1 :(得分:14)
如果你看到它是空的,那就意味着它是空的。无法从必须执行代码的客户端隐藏您的javascript代码。
答案 2 :(得分:10)
您只能尝试降低其可读性(通过微小化和混淆),但代码仍然可以转移,并且可以进行逆向工程。
使用jquery.js文件下载示例中的实际代码。
答案 3 :(得分:2)
关于JavaScript“保护” - 基本上是其他人所说的。
实际上,http://demos.pixelworkshop.fr/circular_countdown_cc/js/countdown.min.js似乎是空的,但实际的插件代码会附加到jquery.js文件,从第58行开始:
http://demos.pixelworkshop.fr/circular_countdown_cc/js/jquery.js
答案 4 :(得分:1)
您可以使用此 javascript混淆工具:
http://www.javascriptobfuscator.com
http://www.daftlogic.com/projects-online-javascript-obfuscator.htm
答案 5 :(得分:0)
如果您要按站点授予代码许可,我建议您也将域锁定您的JavaScript。
您可以自己检查,只需检查加密文件中某处的window.location。这并不是很安全,但是对于90%的将脚本放到目录中并希望它能起作用的用户而言,它将提供一定程度的威慑力。
您还可以使用https://domainlockjs.com(免费)轻松将脚本锁定到域。这是一个稍微好一点的解决方案,因为DomainLockJS引发难以跟踪的错误,并且调试起来要困难得多。
更复杂的方法将涉及使用Ajax脚本注入,并允许特定域访问脚本/不触发XSS错误。这是最难设置的,但是如果注入大量的js,则可能最难解决。
尽管所有这些都可以由熟练的编码人员规避,但是……您只会使事情变得困难而不是不可能。
答案 6 :(得分:-8)
Liblock是我自己建造的一个小工具。它会对您的JS源进行加密 - 通过混淆不是简单的模糊,而是通过加密获得良好的安全性。
当您检查客户端中的DOM时,您所看到的只是:nplreq(url),用于绑定到HTML头的每个脚本。
了解它的工作原理liblock-demo - 这是一个仅用于将脚本隐藏在" nopro_lib"和" xscroll.js"。
加密和解密对浏览器完全透明。它在PC上与Firefox,Chrome,Opera,Konqueror,IE8-10以及Android平板电脑上的Dolphin和Safari进行了测试。
这些消息来源是安全隐藏的,只有付出了巨大努力,它们才能再次打开。使用AES(Rijndael 256)使用一次性密钥完成加密,使用Diffie-Hellman在客户端和(liblock-)服务器之间协商。