实际上,我正在开发一个 Chrome 扩展程序和一个 jQuery 插件来上传它并在 Codecanyon 上出售它。当我“检查源”页面并单击“资源”选项卡时,javascript 文件看起来是空的。Codecanyon 如何做到这一点?我也想在自己的网站上进行文件防盗,但我不知道该怎么做。我知道 php 和 javascript,但没有办法做到这一点,因为浏览器会下载文件来执行它。
您可以在此处查看示例。
实际上,我正在开发一个 Chrome 扩展程序和一个 jQuery 插件来上传它并在 Codecanyon 上出售它。当我“检查源”页面并单击“资源”选项卡时,javascript 文件看起来是空的。Codecanyon 如何做到这一点?我也想在自己的网站上进行文件防盗,但我不知道该怎么做。我知道 php 和 javascript,但没有办法做到这一点,因为浏览器会下载文件来执行它。
您可以在此处查看示例。
您无法隐藏它,因为您的浏览器需要它来执行它。就那么简单。
您需要了解它是在客户端执行的脚本。它没有被编译(意味着它不是二进制文件(0 和 1 机器语言))。所以它可以自由阅读。
不过,您可以使用YUI 压缩器等工具对其进行混淆
基本上这种工具去除了额外的间距、标签行返回和重命名方法(如方法“a”代表“MyShinyMethodWhoMakesNiceStuff”)和变量。这使得阅读和理解代码变得非常困难。因此逆向工程更难实现。
有些人使用一些技巧,如 base64 或其他使用函数编码和解码部分代码的技巧,但这只是技巧,不会愚弄敏锐的眼睛。
通过混淆,你让人们花更多的时间来分析你的代码,因此窃取更加复杂,并且需要时间。假设您制作了一个不错的 javascript 插件,它使每个白色背景都变成紫色(好吧,不是很好的例子,但它只是用于制作图像示例)。有人可能想偷它,把它变成蓝色而不是紫色。如果代码被混淆了,他可能会认为复制你的想法更容易,并用他自己的代码和蓝色背景自己重写它,这将比逆向工程师花费更少的时间,并且理解你的井,也更容易在时间上维护。最后,他将“仅”“窃取”您的想法,但不会“窃取”您的代码。
我认为最终,这只是时间问题。
如果你看到它是空的,这意味着它是空的。无法向必须执行代码的客户端隐藏您的 javascript 代码。
您只能尝试降低其可读性(通过小型化和混淆),但代码仍会被转移,并且可以进行逆向工程。
您示例中的实际代码与 jquery.js 文件一起下载。
关于 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
您可以使用这个javascript 混淆器工具:
http://www.javascriptobfuscator.com
http://www.daftlogic.com/projects-online-javascript-obfuscator.htm
如果您是按站点许可代码,我建议您也锁定您的 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 协商。