如何隐藏或加密JavaScript代码?

时间:2009-06-19 22:50:26

标签: javascript encryption obfuscation

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

7 个答案:

答案 0 :(得分:69)

你可以对它进行模糊处理,但是没有办法完全保护它。

示例混淆器: https://obfuscator.io http://www.javascriptobfuscator.com/Default.aspx

答案 1 :(得分:6)

不,这是不可能的。如果它在客户端浏览器上运行,则必须由客户端浏览器下载。使用Fiddler检查HTTP会话并获取任何下载的js文件非常简单。

你可以使用一些技巧。其中最明显的是使用javascript混淆器。

然后,混淆只会阻止随意窥探,并且不会阻止人们解除和使用您的代码。

您可以以flash影片的形式尝试编译动作脚本。

答案 2 :(得分:6)

虽然每个人都会普遍认为Javascript加密是bad idea,但是有一些小用例可以减慢攻击速度,而不是没有。 你可以从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>

也许这足以减缓一些垃圾邮件机器人的速度。我还没有使用过这个垃圾邮件(还没有)。

答案 3 :(得分:5)

最好的压缩器之一(不是特别是混淆器)是YUI Compressor

答案 4 :(得分:3)

JavaScript是一种脚本语言,因此它必须以人类可读的形式保留,直到它被JavaScript运行时解释和执行为止。

部分隐藏它的唯一方法是至少从技术性较低的角度来隐藏它。

混淆使得人类更难以阅读它,但技术娴熟并非不可能。

答案 5 :(得分:3)

如果您有任何特别需要隐藏的内容(如专有算法),请将其放在服务器上,或将其放入Flash电影中并使用JavaScript调用它。编写ActionScript与编写JavaScript非常相似,您可以在JavaScript和ActionScript之间进行通信。您可以使用Silverlight执行相同的操作,但Silverlight没有Flash的渗透功能。

但是,请记住,任何手机都可以运行您的JavaScript,但不能运行Silverlight或Flash,因此如果您使用Flash或Silverlight,那么您的移动用户就会瘫痪。

答案 6 :(得分:2)

保护代码的唯一安全方法就是不要放弃它。通过客户端部署,无法避免客户端访问代码。

所以简短的回答是:你不能这样做

更长的答案是考虑使用闪光灯或Silverlight。虽然我相信silverlight很乐意在客户端运行反射器时泄露它的秘密。

我不确定flash平台是否存在类似的东西。