我知道它不可能实现100%的保护,但是对于大多数用户来说,它可以是高效的.
例如,我遇到了一个查看当前页面源的网站没有返回任何内容.
在另一种情况下,访问或尝试从浏览器下载.js文件本身
http://gget.com/somesecret.js,
会重定向你和东西.
如果您对代码进行模糊处理,解码它会非常困难吗?如果这样也是另一个好的解决方案(建议使用什么软件)?
这根本不可能.
要使访问者的浏览器能够执行脚本,他们必须能够下载它.无论你试图用JS,服务器权限等提供什么技巧,在一天结束时他们总是可以wget http://example.com/yourcoolscript.js
.即使他们不能(例如你需要"秘密"标题用于该请求),这可能会抑制大多数浏览器的行为,同时也不会阻止一个坚定的人观看.
从根本上说,因为JS是在客户端执行的,所以客户端必须能够访问"原始"JS文件.
你可以做的一件小事是混淆,这可以帮助一点点.但是,由于JS被解释,它也是它自己的反混淆器 - 请参阅我之前的一个例子.
基本上 - "如果你建造它,它们会看起来".:-)
有两种用户:有一大群人不在乎.无需保护他们.
然后,有一群人真的想看看你是怎么做到的.没有办法保护他们.他们拥有所有工具和知识,可以规避您可以提出的任何保护措施.你可以使用混淆,但这会花费你的金钱和时间,所以最后,你只能输.
创造一个伟大的产品加上提供良好的支持,人们愿意为此付出代价.城堡建筑在过去并没有很好地运作(很多努力,它只需要几块石头就可以将它们拆除)而且它今天肯定不起作用.
如果你担心自己的想法会被盗,那就找一份新工作吧,因为他们会这样做,你无能为力.
你可以混淆你的Javascript.野外有很多工具可以做,例如http://www.javascriptobfuscator.com/.但是,它不会阻止任何人查看代码,但会使其更难阅读.
如果您有大秘密,请将它们保存在服务器上.
然后将所有JS文件捆绑在一个文件中,然后进行模糊处理.
这应该可以防止许多人走得更远,并且还可以减少大小和http调用.
但这不会阻止真正的坏人,如果有的话.
我们正在构建一个JS重型应用程序并且很久以前就已经治愈了这种偏执狂.
事实上,我们做了相反的事情.
由于没有什么可以保护,为什么不开源有用的部分并获得其他人的反馈?
试试吧,你不会失望的.
一个想法是使用websockets通过socket.listener
和运行javascript文件到浏览器eval
.这样,任何人都很难看到实际的"源",因为套接字的连接已经关闭.
还有一个惊人的策略可以在http://samy.pl的主页上看到,它使用空格(\ u0020)和制表符(\ u0009)作为字节密码来隐藏JS代码!
如果您查看源代码,您只能看到一行实际的JS代码:http: //pastebin.com/e0pqJ8sB 如果您能弄清楚它是如何工作的话,请亲自看看(没有剧透!)
就混淆器而言,请参阅http://utf-8.jp/public/jjencode.html(和/或其他版本)
这个免费的混淆器上运行的客户端,并产生乱码是unminify.com
和jsbeautifier
甚至无法解码:
$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$._$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$._$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\\"\\"+$.$__+$.___+")"+"\"")())();
原始代码:
alert("Hello, JavaScript")
两个美化网站的输出:
$ = ~[]; $ = { ___: ++$, $$$$: (![] + "")[$], __$: ++$, $_$_: (![] + "")[$], _$_: ++$, $_$$: ({} + "")[$], $$_$: ($[$] + "")[$], _$$: ++$, $$$_: (!"" + "")[$], $__: ++$, $_$: ++$, $$__: ({} + "")[$], $$_: ++$, $$$: ++$, $___: ++$, $__$: ++$ }; $.$_ = ($.$_ = $ + "")[$.$_$] + ($._$ = $.$_[$.__$]) + ($.$$ = ($.$ + "")[$.__$]) + ((!$) + "")[$._$$] + ($.__ = $.$_[$.$$_]) + ($.$ = (!"" + "")[$.__$]) + ($._ = (!"" + "")[$._$_]) + $.$_[$.$_$] + $.__ + $._$ + $.$; $.$$ = $.$ + (!"" + "")[$._$$] + $.__ + $._ + $.$ + $.$$; $.$ = ($.___)[$.$_][$.$_]; $.$($.$($.$$ + "\"" + $.$_$_ + (![] + "")[$._$_] + $.$$$_ + "\\" + $.__$ + $.$$_ + $._$_ + $.__ + "(\\\"\\" + $.__$ + $.__$ + $.___ + $.$$$_ + (![] + "")[$._$_] + (![] + "")[$._$_] + $._$ + ",\\" + $.$__ + $.___ + "\\" + $.__$ + $.__$ + $._$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + "\\" + $.__$ + $._$_ + $._$$ + $.$$__ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$$_ + $.___ + $.__ + "\\\"\\" + $.$__ + $.___ + ")" + "\"")())();
希望这启发那些有需要的人!
特别是在现代浏览器中,这完全是浪费时间.
我可以使用Firebug来查看somesecret.js ...至于另一个我更好,如果你向下滚动你会看到来源.
您可以缩小或混淆您的代码,这将使其难以更改(但不能采取精确的副本).建议缩小,因为它会导致页面加载速度稍快.
不要浪费你的时间.如果浏览器可以下载它来运行它(它可以,否则代码是无用的),可以编写程序来下载并保存它.
一次又一次,我们已经看到保护这样的东西的技术方法不起作用.
你真的认为你的JS代码是如此珍贵,以至于它需要那种保护吗?一旦你使它工作,一定要通过minifier运行它,如果只是为了加快下载过程.但至于保护它,我会专注于你最擅长的(我假设是编码).
如果您确实需要保护代码不被查看,请不要在客户端JS中执行此操作.把它放在服务器上,然后使用JS与之通信.