如何混淆或使我的JavaScript文件难以理解?

时间:2011-12-30 11:51:50

标签: javascript jquery obfuscation

我的应用程序中包含JavaScript脚本,包含JavaScript和jQuery函数。 所有用户与我的应用程序的交互都是动态的,它通过jQuery传递给应用程序。

我意识到,当我在客户端运行我的应用程序时,客户端可以通过查看页面源(Ctrl + U)来查看我的所有源代码。

我如何隐藏或做某事以致用户无法理解或阅读来源?

我想做像Facebook那样的事情。通过查看Facebook源用户无法重用其源代码甚至无法理解它。

我用Google搜索,发现此过程称为混淆,但这对我不起作用。

我试过了:

http://www.javascriptobfuscator.com/default.aspx

http://dean.edwards.name/packer/

http://www.daftlogic.com/projects-online-javascript-obfuscator.htm

甚至我都试过了    http://www.jasob.com/

但这对我没用。

3 个答案:

答案 0 :(得分:24)

如果有人真正关心你的代码,他将承担不缩小的工作量(用有用的变量/函数名替换随机)。 “加密”或打包等其他任何内容都只是snake oil,因为它可以非常容易地恢复。因此,为自己节省一些工作,而不是花更多的时间来改善应用程序。

所以:你应该在生产系统上做的唯一事情是缩小你的JS代码。这使它更小,因此加载更快 - 所以它实际上是一个优势。除此之外,对于那些只是好奇的快速浏览但又不想花时间的人来说,它会降低可读性。

例如,facebook JS文件只是缩小了 - 很可能只是因为带宽/性能原因。


缩小JavaScript的最简单方法是使用Google的网络服务:http://closure-compiler.appspot.com/home
请注意,它有1MB的限制,所以如果你的JS很大,你可能需要下载基于Java的minifier来在本地运行它。

答案 1 :(得分:2)

ThiefMaster说的一切都是真的。值得注意的是,您的应用程序的设计应假设用户可以查看和操作客户端上的所有内容。如果您担心混淆,因为您认为它会阻止用户查看敏感数据或操纵价格等信息,那么您需要重新设计应用程序,以便安全逻辑驻留在服务器上。

答案 2 :(得分:0)

由于我需要缩小我的javascript源代码,我正在寻找一个javascript程序,它可以缩小任何javascript代码。

为什么要使用javascript minifier? 因为,我正在从Web服务器向客户端写一些随机的javascript代码。

我应该使用" node.js"在Web服务器上执行一个javascript程序,它生成一个javascript代码并在运行中将其缩小并发送给客户端。

这个javascript程序是一个:加密和解密程序。客户端的javascript代码结果应该包含一个javascript函数,它解密加密数据的json或十六进制版本的每个部分。该函数执行整数的加,减和乘法。有时候,我可以生成一个条件(if,then和else)来计算两个不同的操作。 此函数用于解密两个或多个参数输入。

随机函数:每次客户端请求一些私有数据时,Web服务器都会生成两个不同的javascript函数:一个用于加密,另一个用于解密。解密功能被发送到客户端。 Web服务器使用加密功能来加密私有数据并将其发送到客户端。它对混淆有意义:每次进程运行时,每次发送功能都完全不同。

并且,为了说服加密/解密非常安全,我为客户端添加了两个或更多参数的表格值转换;但是,表格值实际上是由为Web服务器编写的函数生成的,并且包含一些数字常量,这些常量永远不会发送给客户端。因此,任何想要解密的人都必须具有常量值。

我解释了这个过程,因为:

  1. 你在javascript源代码中采取了一些关于混淆的事情;但是,网络服务器和浏览器尚未实现javascript中的混淆......也许,它可能会发生......但是,在" SSL-ize"的帮助下,什么样的解决方案是有用的。所有通过互联网传输。

  2. 可以使用可读的加密/解密功能进行加密和解密。而且,没有SSL证书的成本。甚至,"一个中间人"将解密加密数据;为此,他只需要执行javascript函数。好吧..但是想象一下javascript解密函数也被加密了...然后,#34;中间的人#34;必须执行解密功能,然后再解密解密的内容,这些内容是javascript函数,用于解密加密数据。

  3. 并且,想象一下,如果Web服务器向客户端提出问题,并且唯一的答案由客户端的结果计算(其未通过Internet发送)处理......则不可能#&# 34;中间人#34;得到答案。

    看看我的想法;我等着来自任何人的评论。