如何防止您的JavaScript代码被盗,被复制和查看?

时间:2009-11-02 08:42:15

标签: javascript security

我知道100%的保护是不可能的,但是对于大多数用户而言,这是高或者有效的。

例如,我遇到一个网站,其中查看当前页面的源没有返回任何内容。

在另一种情况下,访问或尝试从浏览器

下载.js文件

http://gget.com/somesecret.js

会重定向你和你的东西。

如果您对代码进行模糊处理,解码它会非常困难吗?如果这样也是另一个好的解决方案(建议使用什么软件)?

10 个答案:

答案 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.comjsbeautifier无法解码的乱码:

$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$._$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$._$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\\"\\"+$.$__+$.___+")"+"\"")())();

原始代码:

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。 (这可能会使代码混淆不清)