我知道100%的保护是不可能的,但是对于大多数用户而言,这是高或者有效的。
例如,我遇到一个网站,其中查看当前页面的源没有返回任何内容。
在另一种情况下,访问或尝试从浏览器
下载.js文件http://gget.com/somesecret.js,
会重定向你和你的东西。
如果您对代码进行模糊处理,解码它会非常困难吗?如果这样也是另一个好的解决方案(建议使用什么软件)?
答案 0 :(得分:46)
根本不可能。
要让访问者的浏览器能够执行脚本,他们必须能够下载它。无论您尝试使用JS,服务器权限等获取什么技巧,在一天结束时它们总是只有wget http://example.com/yourcoolscript.js
。即使他们不能(例如你需要“秘密”标题用于该请求),这可能会抑制大多数浏览器的行为,同时也不会阻止一个坚定的人查看。
从根本上说,因为JS是在客户端执行的,所以客户端必须能够访问“原始”JS文件。
你可以做的一件小事是混淆,这可以帮助一点点。但是,由于JS被解释,它也是它自己的反混淆器 - 请参阅one of my earlier answers作为例子。
基本上 - “如果你建造它,它们会看起来”。 : - )
答案 1 :(得分:32)
有两种用户:有一大群人不在乎。无需保护他们。
然后,有一群人真的想看看你是怎么做到的。没有办法保护他们。他们拥有所有工具和知识,可以规避您可以提出的任何保护措施。你可以使用混淆,但这会花费你的金钱和时间,所以最后,你只能输掉。
创造出色的产品并提供良好的支持,人们愿意为此付出代价。城堡建筑在过去并没有很好地运作(很多努力,它只用了几块石头就把它们拆掉了)而且它今天肯定不起作用。
如果你担心自己的想法会被盗,那么找一份新工作,因为他们会这样做而且你无能为力。
答案 2 :(得分:20)
你可以混淆你的Javascript。在野外有很多工具可以做到这一点,例如: http://www.javascriptobfuscator.com/。但是,它并不会阻止任何人查看代码,但会使其更难阅读。
答案 3 :(得分:15)
如果您有大秘密,请将它们保存在服务器上。
然后将所有JS文件捆绑在一个文件中,然后进行模糊处理 这可以防止很多人走得更远,并且还可以减少大小和http呼叫 但这不会阻止真正的坏人,如果有的话。
我们正在构建一个JS重型应用程序并且很久以前就已经治愈了这种偏执狂 事实上,我们做了相反的事情。
由于没有什么可以保护,为什么不开源有用的部分并从其他人那里得到反馈? 试试吧,你不会失望的。
答案 4 :(得分:7)
一个想法是使用websockets 通过socket.listener
向浏览器提供javascript文件,并使用eval
运行。这样,任何人都很难看到实际的“源”,因为套接字的连接已经关闭。
在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")
两个美化网站的输出:
$ = ~[];
$ = {
___: ++$,
$$$$: (![] + "")[$],
__$: ++$,
$_$_: (![] + "")[$],
_$_: ++$,
$_$$: ({} + "")[$],
$$_$: ($[$] + "")[$],
_$$: ++$,
$$$_: (!"" + "")[$],
$__: ++$,
$_$: ++$,
$$__: ({} + "")[$],
$$_: ++$,
$$$: ++$,
$___: ++$,
$__$: ++$
};
$.$_ = ($.$_ = $ + "")[$.$_$] + ($._$ = $.$_[$.__$]) + ($.$$ = ($.$ + "")[$.__$]) + ((!$) + "")[$._$$] + ($.__ = $.$_[$.$$_]) + ($.$ = (!"" + "")[$.__$]) + ($._ = (!"" + "")[$._$_]) + $.$_[$.$_$] + $.__ + $._$ + $.$;
$.$$ = $.$ + (!"" + "")[$._$$] + $.__ + $._ + $.$ + $.$$;
$.$ = ($.___)[$.$_][$.$_];
$.$($.$($.$$ + "\"" + $.$_$_ + (![] + "")[$._$_] + $.$$$_ + "\\" + $.__$ + $.$$_ + $._$_ + $.__ + "(\\\"\\" + $.__$ + $.__$ + $.___ + $.$$$_ + (![] + "")[$._$_] + (![] + "")[$._$_] + $._$ + ",\\" + $.$__ + $.___ + "\\" + $.__$ + $.__$ + $._$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + "\\" + $.__$ + $._$_ + $._$$ + $.$$__ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$$_ + $.___ + $.__ + "\\\"\\" + $.$__ + $.___ + ")" + "\"")())();
希望这能激发那些有需要的人!
答案 5 :(得分:5)
特别是在现代浏览器中,这完全是浪费时间。
我可以使用Firebug来查看somesecret.js ...至于另一个我更好,如果你向下滚动你会看到来源。
您可以缩小或混淆您的代码,这将使其难以更改(但不能采取精确的副本)。建议缩小,因为它会使页面加载速度稍快。
答案 6 :(得分:5)
不要浪费你的时间。如果浏览器可以下载它来运行它(它可以,否则代码是无用的),可以编写一个程序来下载并保存它。
一次又一次,我们已经看到保护这类事情的技术方法不起作用。
你真的认为你的JS代码是如此珍贵,以至于它需要那种保护吗?一旦你使它工作,一定要通过minifier运行它,如果只是为了加快下载过程。但至于保护它,我会专注于你最擅长的事情(我假设是编码)。
如果您确实需要保护代码不被查看,请不要在客户端JS中执行此操作。把它放在服务器上,然后用JS与之通信。
答案 7 :(得分:2)
好吧,如果您拥有服务器,则可以拒绝来自您自己的主机名以外的引用者的访问权限。在Apache上,你可以通过.htaccess来实现。
您还可以使用Dean Edwards' packer打包生产Javascript代码。
但请注意,使用Firebug或其他调试工具,大多数人仍然可以通过DOM选项卡/检查器查看您的代码。
答案 8 :(得分:0)
如果有人为你的代码加油,你可以起诉他们。您的代码受版权保护。你就像一本小说的作者。如果有人偷了你的应用程序或你的代码的任何部分,他们将犯有抄袭罪。
答案 9 :(得分:0)
你可以做的一件事就是完全绕过javascript - 用同样或更有能力的语言编写客户端逻辑(你可以找到一个javascript编译器)并最终将它编译成javascript。 (这可能会使代码混淆不清)