我该如何隐藏或加密JavaScript代码?

64

有没有办法隐藏或加密JavaScript代码,以防止人们查看、复制和/或修改专有程序?


请尝试此链接:https://dev59.com/hWw15IYBdhLWcg3wCnQn#13262948-Jepp - Jepp
7个回答

95

默认选项下它运行良好,没有返回任何错误。谢谢! - user1377664
使用 Encode.js:encodejs.devincity.com - nachshon f
你可以完全隐藏它,使其在源视图中不可见,但使用Chrome Inspector或其他工具的高级知识仍然可以看到它。 - Lucian Minea
如果我将YouTube视频URL保存在变量中,并且用户输入正确密码后,该URL将进入Iframe。问题是,它是否会在源代码和Chrome检查器中保护YouTube URL。我希望用户只能在我的网站上观看视频,无法复制URL。但我想使用JavaScript或PHP实现这一点。 - muhaymin khan
使用JavaScript创建了一个HTML混淆器,它可以混淆脚本。这是我十多年前创建的,您可以在我的存档服务器上自由使用。http://vps-net.com/internet-development-tools/html-data-obfuscation-web-tool.php#FirstStep - DoctorLouie
如果您要混淆绝对依赖于在特定域上运行的代码(例如,从服务器解析的所有Json文件都使用从location.origin派生的密钥进行解密),并且您使用了一个体面的混淆器,假设您拥有该域,您可以将其锁定,对吗? - unsynchronized

8
不,这是不可能的。如果在客户端浏览器上运行,它必须由客户端浏览器下载。使用Fiddler检查HTTP会话并获取任何已下载的js文件非常简单。
有一些技巧可以使用。其中最明显的一个是使用javascript混淆器。
然而,混淆只能防止随意窥视,并不能防止人们窃取和使用您的代码。
您可以尝试以Flash电影的形式编译动作脚本。

6
虽然大家普遍认为Javascript加密是一个坏主意,但有一些小的用例,减缓攻击也胜过什么都没有。你可以从YUI Compressor开始(如@Ben Alpert所说),或者使用JSMin、Uglify等工具。
然而,我真正想要“隐藏东西”的主要情况是当我发布电子邮件地址时。请注意,点击“检查元素”时出现的Chrome问题。它会显示您的原始代码:每次都是这样。这就是为什么混淆通常被认为是更好的方法。
在这个基础上,我采取了双管齐下的策略,纯粹是为了减缓垃圾邮件机器人的速度。我混淆/压缩js,然后再次通过编码器运行它(同样,在Chrome中这第二步是完全无意义的)。
虽然不是严格意义上的Javascript编码器,但我发现最好的html编码器是http://hivelogic.com/enkoder/。它将把这个东西变成:
<script type="text/javascript">
//<![CDATA[
<!--
var c=function(e) { var m="mail" + "to:webmaster";var a="somedomain"; e.href = m+"@"+a+".com";  
};
//-->
//]]>
</script>
<a href="#" onclick="return c(this);"><img src="images/email.png" /></a>

变成这个:

<script type="text/javascript">
//<![CDATA[
<!--
var x="function f(x){var i,o=\"\",ol=x.length,l=ol;while(x.charCodeAt(l/13)!" +
"=50){try{x+=x;l+=l;}catch(e){}}for(i=l-1;i>=0;i--){o+=x.charAt(i);}return o" +
".substr(0,ol);}f(\")87,\\\"meozp?410\\\\=220\\\\s-dvwggd130\\\\#-2o,V_PY420" +
"\\\\I\\\\\\\\_V[\\\\\\\\620\\\\o710\\\\RB\\\\\\\\610\\\\JAB620\\\\720\\\\n\\"+
"\\{530\\\\410\\\\WJJU010\\\\|>snnn|j5J(771\\\\p{}saa-.W)+T:``vk\\\"\\\\`<02" +
"0\\\\!610\\\\'Dr\\\\010\\\\630\\\\400\\\\620\\\\700\\\\\\\\\\\\N730\\\\,530" +
"\\\\2S16EF600\\\\;420\\\\9ZNONO1200\\\\/000\\\\`'7400\\\\%n\\\\!010\\\\hpr\\"+
"\\= -cn720\\\\a(ce230\\\\500\\\\f730\\\\i,`200\\\\630\\\\[YIR720\\\\]720\\\\"+
"r\\\\720\\\\h][P]@JHADY310\\\\t230\\\\G500\\\\VBT230\\\\200\\\\Clxhh{tzra/{" +
"g0M0$./Pgche%Z8i#p`v^600\\\\\\\\\\\\R730\\\\Q620\\\\030\\\\730\\\\100\\\\72" +
"0\\\\530\\\\700\\\\720\\\\M410\\\\N730\\\\r\\\\530\\\\400\\\\4420\\\\8OM771" +
"\\\\`4400\\\\$010\\\\t\\\\120\\\\230\\\\r\\\\610\\\\310\\\\530\\\\e~o120\\\\"+
"RfJjn\\\\020\\\\lZ\\\\\\\\CZEWCV771\\\\v5lnqf2R1ox771\\\\p\\\"\\\\tr\\\\220" +
"\\\\310\\\\420\\\\600\\\\OSG300\\\\700\\\\410\\\\320\\\\410\\\\120\\\\620\\" +
"\\q)5<: 0>+\\\"(f};o nruter};))++y(^)i(tAedoCrahc.x(edoCrahCmorf.gnirtS=+o;" +
"721=%y;++y)87<i(fi{)++i;l<i;0=i(rof;htgnel.x=l,\\\"\\\"=o,i rav{)y,x(f noit" +
"cnuf\")"                                                                     ;
while(x=eval(x));
//-->
//]]>
</script>

也许这已足以减缓一些垃圾邮件机器人。使用此方法,我还没有收到任何垃圾邮件。

1
另一个选择是https://cloakedjs.com/,它可以混淆、加密并添加调试防护和域锁定。但仍然不是100%安全的...但毕竟,它是在浏览器中运行的。 - AnyWhichWay

5

其中一个最好的压缩工具(不是专门的混淆器)是YUI Compressor


2
提供的链接无法使用。 - Tausif Anwar

4

JavaScript是一种脚本语言,因此直到JavaScript运行时需要解释和执行之前,它都保持着人类可读的形式。

唯一部分隐藏它的方法,至少对于不太懂技术的人来说,就是混淆。

混淆将使人类更难阅读,但对于技术娴熟的人来说并非不可能。


2

保护您的代码唯一安全的方法就是不要将其公开。在客户端部署中,无法避免客户端访问代码。

所以简短的回答是:你做不到。

更长的回答是考虑使用Flash或Silverlight。尽管我相信Silverlight会在客户端上运行Reflector时自动泄漏其机密信息。

我不确定是否存在类似的Flash平台。


2
如果您有任何想要隐藏的特定内容(例如专有算法),请将其放在服务器上,或者将其放在Flash电影中并使用JavaScript进行调用。编写ActionScript非常类似于编写JavaScript,并且您可以在JavaScript和ActionScript之间进行通信。您也可以使用Silverlight进行相同的操作,但是Silverlight的渗透率不如Flash。
然而,请记住,任何移动电话都可以运行您的JavaScript,但不能运行Silverlight或Flash,因此如果选择Flash或Silverlight,则会削弱您的移动用户。

10
以防有人看到这条信息却没有意识到现在已经不是2009年了,请不要这样做。Flash和Silverlight现在几乎已经死亡。 - Liam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接