如何防止JavaScript代码被窃取、复制和查看?
我知道100%的保护是不可能的,但对于大多数用户来说,一些高或低的保护是可行的 例如,我遇到了一个站点,查看当前页面的源代码时没有返回任何内容 在另一种情况下,访问或尝试从浏览器下载.js文件本身 , 会改变你的方向如何防止JavaScript代码被窃取、复制和查看?,javascript,security,Javascript,Security,我知道100%的保护是不可能的,但对于大多数用户来说,一些高或低的保护是可行的 例如,我遇到了一个站点,查看当前页面的源代码时没有返回任何内容 在另一种情况下,访问或尝试从浏览器下载.js文件本身 , 会改变你的方向 如果你混淆了你的代码,解码会很困难吗?如果是这样的话,这也是另一个很好的解决方案(推荐什么软件)?尤其是在现代浏览器中,这完全是浪费时间 我可以使用Firebug查看一些秘密。js。。。至于另一个,如果你向下滚动,你会看到源代码 您可以缩小或模糊您的代码,这将使它很难修改(但不采取
如果你混淆了你的代码,解码会很困难吗?如果是这样的话,这也是另一个很好的解决方案(推荐什么软件)?尤其是在现代浏览器中,这完全是浪费时间 我可以使用Firebug查看一些秘密。js。。。至于另一个,如果你向下滚动,你会看到源代码
您可以缩小或模糊您的代码,这将使它很难修改(但不采取确切的副本)。建议缩小,因为这将导致页面加载速度稍快。如果您拥有服务器,则可以拒绝来自除您自己的主机名以外的其他引用方的访问。在Apache上,您可以通过.htaccess来实现这一点 您还可以使用打包生产Javascript代码
但请注意,使用Firebug或其他调试工具,大多数人仍然可以通过DOM选项卡/检查器查看代码。您可能会混淆Javascript。在野外有很多工具可以做到这一点,例如。但是,这并不会阻止任何人看到代码,反而会使代码更难阅读。这根本不可能 为了让访问者的浏览器能够执行脚本,他们必须能够下载脚本。不管你试图用JS、服务器权限等耍什么花招,到头来,它们总是可以
wgethttp://example.com/yourcoolscript.js
。即使他们不能(例如,您需要该请求的“机密”标题),这可能会抑制大多数浏览器的行为,同时不会阻止一个有决心的人查看
基本上,由于JS是在客户端执行的,因此客户端必须能够访问“原始”JS文件
您可以做的一件小事是模糊处理,这会有一点帮助。但是由于JS是解释的,所以它也是它自己的DeobFousator——请参见示例
基本上-“如果你建造它,它们会看起来像。”——) 不要浪费你的时间。如果浏览器可以下载它来运行它(而且可以,否则代码就没用了),那么可以编写一个程序来下载并保存它 我们一次又一次地看到,用技术手段来保护这样的东西是行不通的 你真的认为你的JS代码是如此珍贵以至于需要这样的保护吗?一旦你让它工作起来,尽一切办法通过一个迷你程序运行它,如果只是为了加快下载过程。但是关于保护它,我会集中精力在你做得最好的事情上(我假设这就是对它进行编码)
如果您确实需要保护代码不被查看,请不要在客户端JS中这样做。把它放在服务器上,只需使用JS与之通信。有两种用户:一种是不在乎的大群体。没有必要保护他们 然后,有一群人真的想看看你是怎么做到的。没有办法防止他们。他们有所有的工具和知识来规避任何你能想到的保护。您可以使用模糊处理,但这将花费您的金钱和时间,因此最终,您只能失败 创造一个伟大的产品,并提供良好的支持,人们将愿意为此付出代价。城堡建筑在过去不太好用(花了很多力气,只需要几块石头就可以把它们拆掉了),现在肯定不管用了
如果你担心你的想法会被窃取,那就去找一份新工作,因为他们会被窃取,而你无能为力。如果你有大秘密,就把它们保存在服务器上。
然后将所有JS文件捆绑在一个文件中,使其变得模糊。
这应该可以防止很多人走得更远,并减少大小和http调用。
但这并不能阻止真正的坏人 我们正在构建一个JS重磅应用程序,并在很久以前治愈了这种妄想症。
事实上,我们做的恰恰相反 既然没有什么可以保护,为什么不开放源代码有用的部分并从其他人那里获得反馈呢?
试试看,你不会失望。一个想法是使用websockets通过
socket.listener
向浏览器提供javascript文件,并使用eval
运行。这样,任何人都很难看到实际的“源”,因为套接字的连接已经关闭
在,的主页上可以看到另一个惊人的策略,它使用空格(\u0020)和制表符(\u0009)作为字节密码来隐藏JS代码强>
如果查看源代码,您只能看到1行实际的JS代码:
看看你自己,如果你能弄清楚它是如何工作的(没有破坏者!)
关于模糊处理程序,请参阅(和/或其他版本)
这个免费的模糊处理程序运行客户端,产生的乱码unnify.com
和jsbeautifier
甚至无法解码:
$=~[]$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$._$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$._$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\