如何防止您的JavaScript代码被盗,复制和查看?
我知道100%的保护是不可能的,但是对于大多数用户来说,这是很高的。
例如,我遇到了一个查看当前页面源的网站,什么也没有返回。
在另一种情况下,访问或试图从浏览器下载.js文件本身
http://gget.com/somesecret.js ,
会redirect你和东西。
如果你混淆了你的代码,解码会非常困难吗? 如果这样也是另一个好的解决scheme(推荐使用什么软件)?
你可以混淆你的Javascript。 有很多工具可以在野外使用,例如http://www.javascriptobfuscator.com/ 。 但是,这并不妨碍任何人看到代码,但更难以阅读。
这根本不可能。
对于访问者的浏览器能够执行脚本,他们必须能够下载它。 无论你试图用JS,服务器权限等等,在一天结束时他们总是可以只用wget http://example.com/yourcoolscript.js
。 即使他们不能(例如,你需要“秘密的”这个请求的标题),这可能会抑制大多数浏览器的行为,而不是阻止一个确定的人看起来。
基本上,因为JS是在客户端执行的,客户端必须有权访问“原始”JS文件。
你可以做的一件小事是混淆,这可以帮助一点点。 但是因为JS被解释了,所以它也是它自己的解混器 – 参见我之前的一个例子。
基本上 – “如果你build立它,他们会看”。 🙂
有两种用户:有一大群谁不在乎。 没有必要保护他们。
那么,这个组织真的想看看你是怎么做到的。 没有办法保护他们。 他们拥有所有的工具和知识来规避你可能提出的任何保护。 你可以使用混淆,但这会花费你的钱和时间,所以最终你只能输。
创造一个伟大的产品,并提供良好的支持,人们愿意为此付出代价。 过去,城堡build筑工作不好(很多努力,只需要几块石头就可以把它们撕下来),今天肯定不行。
如果你担心自己的想法会被盗用,那就去找一份新的工作,因为他们会做,而且你什么都做不了。
如果你有很大的秘密,把它们放在服务器上。
然后将所有的JS文件捆绑到一个文件中,混淆。
这应该阻止很多人走得更远,并且还会减小大小和http呼叫。
但是,这不会阻止真正的坏人,如果有的话。
我们正在构build一个JS沉重的应用程序,很久以前就治愈了这种偏执狂。
事实上,我们做了相反的事情。
由于没有任何东西可以得到保护,为什么不开放源代码有用的部分,并得到别人的反馈?
试试吧,你不会失望的。
其中一个想法是使用websockets通过socket.listener
向浏览器提供javascript文件并使用eval
运行。 这样,任何人都很难看到实际的“源”,因为套接字的连接已经closures了。
在http://samy.pl的主页上可以看到另一个惊人的策略,; 它使用空格(\ u0020)和制表符(\ u0009)作为字节密码来隐藏JS代码!
如果你查看源代码,你只能看到1行的实际的JS代码: http : //pastebin.com/e0pqJ8sB看看自己,如果你能弄清楚它是如何工作的(没有破坏者!)
至于混淆器,请参阅http://utf-8.jp/public/jjencode.html (和/或其他版本)
这个免费的混淆器运行客户端 ,并产生unminify.com
和jsbeautifier
甚至无法解码的乱码:
$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$._$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$._$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\\"\\"+$.$__+$.___+")"+"\"")())();
原始码:
alert("Hello, JavaScript")
来自两个美化网站的输出:
$ = ~[]; $ = { ___: ++$, $$$$: (![] + "")[$], __$: ++$, $_$_: (![] + "")[$], _$_: ++$, $_$$: ({} + "")[$], $$_$: ($[$] + "")[$], _$$: ++$, $$$_: (!"" + "")[$], $__: ++$, $_$: ++$, $$__: ({} + "")[$], $$_: ++$, $$$: ++$, $___: ++$, $__$: ++$ }; $.$_ = ($.$_ = $ + "")[$.$_$] + ($._$ = $.$_[$.__$]) + ($.$$ = ($.$ + "")[$.__$]) + ((!$) + "")[$._$$] + ($.__ = $.$_[$.$$_]) + ($.$ = (!"" + "")[$.__$]) + ($._ = (!"" + "")[$._$_]) + $.$_[$.$_$] + $.__ + $._$ + $.$; $.$$ = $.$ + (!"" + "")[$._$$] + $.__ + $._ + $.$ + $.$$; $.$ = ($.___)[$.$_][$.$_]; $.$($.$($.$$ + "\"" + $.$_$_ + (![] + "")[$._$_] + $.$$$_ + "\\" + $.__$ + $.$$_ + $._$_ + $.__ + "(\\\"\\" + $.__$ + $.__$ + $.___ + $.$$$_ + (![] + "")[$._$_] + (![] + "")[$._$_] + $._$ + ",\\" + $.$__ + $.___ + "\\" + $.__$ + $.__$ + $._$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + "\\" + $.__$ + $._$_ + $._$$ + $.$$__ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$$_ + $.___ + $.__ + "\\\"\\" + $.$__ + $.___ + ")" + "\"")())();
希望这启发需要的人!
特别是在现代浏览器中,这是完全浪费时间。
我可以使用Firebug来看看somesecret.js …至于其他我更好,如果你滚下来,你会看到源。
你可以缩小或混淆你的代码,这将使得很难改变(但不是一个确切的副本)。 推荐使用缩小,因为这会导致页面加载速度稍快。
不要浪费你的时间。 如果一个浏览器可以下载它来运行它(也可以,否则代码是无用的),一个程序可以写下载并保存。
一次又一次,我们已经看到,保护这种事情的技术手段是行不通的。
你真的认为你的JS代码是如此的珍贵,它需要这种保护? 一旦你得到它的工作,通过一切手段运行它通过缩小,如果只是为了加快下载过程。 但是为了保护它,我会专注于你所做的最好的事情(我正在假设它正在编码)。
如果你真的需要保护代码不被查看,不要在客户端JS做这件事。 把它放在服务器上,只是使用JS来沟通。
那么,如果你拥有服务器,你可以拒绝来自除你自己的主机名以外的引用者的访问。 在Apache上,你可以通过.htaccess来做到这一点。
您也可以使用Dean Edwards的打包程序打包您的制作Javascript代码。
但请注意,使用Firebug或其他debugging工具,大多数人仍然能够通过DOM选项卡/检查器查看您的代码。
如果有人确实加了你的代码,你可以起诉他们。 您的代码受版权保护。 你就像小说的作者。 如果有人偷了你的应用程序或你的代码的任何部分,他们会犯剽窃。
你可以做的一件事就是完全绕过javascript–用同样或者更能干的语言(你可以find一个javascript编译器)编写客户端逻辑,最后把它编译成javascript。 (这可能太混淆了代码)