加密-如何隐藏或加密JavaScript代码?

这个问题已经在这里有了答案:

  • 如何混淆(保护)JavaScript? [关闭]                                     24个答案

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

Samuel Liew asked 2020-01-14T16:11:13Z
7个解决方案
70 votes

您可以对其进行混淆,但是无法完全保护它。

示例混淆器:[https://obfuscator.io]

Sev answered 2020-01-14T16:11:36Z
6 votes

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

您可以使用一些技巧。 最明显的方法之一就是采用JavaScript混淆器。

再有,混淆只会阻止偶然的监听,而不会阻止人们提升和使用您的代码。

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

Alan answered 2020-01-14T16:12:10Z
6 votes

尽管每个人都普遍认为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>

也许足以减慢一些垃圾邮件机器人的速度。 使用此功能,我还没有收到任何垃圾邮件(!)。

cmroanirgo answered 2020-01-14T16:12:54Z
5 votes

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

Sophie Alpert answered 2020-01-14T16:13:14Z
3 votes

JavaScript是一种脚本语言,因此一直保持可读性,直到JavaScript运行时对其进行解释和执行为止。

至少对技术不太熟练的人而言,部分隐藏它的唯一方法是混淆。

混淆使人类更难阅读它,但对于精通技术的人来说并非没有可能。

BakerTheHacker answered 2020-01-14T16:13:43Z
3 votes

如果您要隐藏任何东西(例如专有算法),请将其放在服务器上,或放入Flash电影中,然后使用JavaScript进行调用。 编写ActionScript与编写JavaScript非常相似,并且可以在JavaScript和ActionScript之间进行通信。 您可以使用Silverlight进行相同的操作,但是Silverlight没有Flash的渗透能力。

但是,请记住,任何手机都可以运行您的JavaScript,但不能运行Silverlight或Flash,因此,如果使用Flash或Silverlight,则会损害移动用户的利益。

Nosredna answered 2020-01-14T16:14:09Z
2 votes

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

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

更长的答案是考虑使用Flash或Silverlight。 尽管我相信Silverlight会很乐意在客户端运行反射器的情况下放弃它的秘密。

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

Andrew Harry answered 2020-01-14T16:14:42Z
translate from https://stackoverflow.com:/questions/1020368/how-can-i-hide-or-encrypt-javascript-code