使用混淆器足以保护我的JavaScript代码吗?
我正在构建使用JavaScript编写的开发工具。
这将不是一个开源项目,并且(希望)将作为商业产品出售。
我正在寻找保护我的投资的最佳方法。使用混淆器(代码篡改器)是否足以合理保护代码?
还有其他我不知道的替代方法吗?
(我不确定混淆器是否正确,它是采用代码并使其变得非常不可读的应用程序之一。)
解决方案
回答
那大概是我们可以做到的最好。请注意,只要有足够的奉献精神,任何人都可能会对程序产生混淆。在开始项目之前,请确保我们对此感到满意。我认为最大的问题是控制谁在他们的网站上使用它。如果有人去了上面载有代码的网站,并且喜欢它的功能,那么当他们仅能复制代码时,他们不了解代码的作用或者无法阅读代码就没关系在自己的网站上使用它。
回答
如果有人想弄清楚代码,混淆器将根本无法。该代码仍然存在于客户端计算机上,他们可以获取它的副本并在闲暇时学习它。
由于必须将源代码交给浏览器执行,因此根本无法隐藏用Javascript编写的代码。
如果要隐藏代码,则可以使用以下选项:
1)使用将编译的代码(不是源代码)下载到客户端的环境,例如Flash或者Silverlight。我什至不确定这是否万无一失,但是肯定比Javascript好得多。
2)在服务器端有一个后端来完成工作,而瘦客户机仅向服务器发出请求。
回答
我会说是的,如果我们还确保比使用Dean Edward's Packer或者类似工具压缩代码也就足够了。如果我们考虑使用.NET Reflector之类的工具从.NET中进行反向工程编译代码/ IL的可能性,我们将意识到我们无能为力,无法完全保护投资。
另一方面,请记住,发布源代码的人似乎也做得很好,无论如何,正是根据他们的经验,人们想要的不仅仅是知识产权。
回答
我们总是面临这样一个事实,即访问我们网页的任何用户都会下载Javascript源的某些有效版本。他们将拥有源代码。对其进行混淆可能会导致很难窃取某人的意图以窃取辛勤工作。但是,在许多情况下,某些人甚至可以重用混淆的源代码!或者,在最坏的情况下,他们可以手动解散并最终理解它。
像我们这样的情况的一个例子可能是Google地图。 Javascript来源显然被混淆了。但是,对于真正的私有/敏感逻辑,它们将数据推送到服务器,并让服务器使用XMLHttpRequests(AJAX)处理该信息。通过这种设计,我们可以在服务器端拥有重要的部分,并且受到更严格的控制。
回答
代码混淆器足以满足需要最小程度保护的要求,但是我认为这绝对不足以真正保护我们。如果我们有耐心,我们可以将整个事情分解真..我敢肯定,有程序可以为我们做这件事。
话虽如此,我们不能阻止任何人盗用东西,因为他们最终将破坏我们无论如何创建的任何保护。在不编译代码的脚本语言中,这尤其容易。
如果我们使用的是其他语言,例如Java或者.NET,则可以尝试执行"呼唤"之类的操作,以验证许可证号是否与给定的URL匹配。如果应用程序是某种始终在线连接的在线应用程序,则该方法有效。但是,有了源代码,人们可以轻松地绕过该部分。
简而言之,对于我们正在做的事情,javascript是一个糟糕的选择。
与我们正在做的事情相比,可能需要使用Web服务后端来获取数据。让Web服务处理身份验证/验证过程。需要做一些工作以确保它是防弹的,但它可能会起作用
回答
如果我们试图混淆代码以希望有人不窃取它,那么我们将在一场失败的战斗中奋斗。我们可以阻止随意的浏览器使用它,但是专职人员几乎可以肯定能够克服我们使用的任何措施。
过去,我看到人们做过几件事:
- 在页面顶部粘贴很多空白,并显示一条消息,告知人们代码不可用,实际上,我们只需要向下滚动几页即可获得代码。
- 通过某种编码器运行它,是如此有用,因为它只能通过解码器运行。
- 另一种方法是将变量名简化为一个字符并删除空格(这也是一种有效的做法)。
还有许多其他方法。
最后,努力只会阻止休闲浏览器看到东西。如果有人敬业,那么我们将无能为力。我们将不得不忍受这一点。
我的建议是,通过拥有最好的产品/服务/社区,而不是最混淆的代码,制作出一种真正超赞的产品,以吸引最多的人并击败任何竞争对手。
回答
如果这是一个网站,就其本质而言,只需单击一下菜单就可以查看其代码,是否真的有理由隐藏任何内容?如果有人想窃取代码,则他们很可能会努力使即使是最混乱的代码也易于阅读。看看商业网站,他们不会混淆自己的代码,没有人出去从Google应用程序中窃取代码。如果我们真的担心代码被盗,我会建议我们使用其他编译语言来编写代码。 (这当然会破坏整个webapp的东西...)即使那样,我们也不是完全安全的,那里有许多反编译器。
所以说真的,面对任何有足够动力的人,我们都无法做自己想做的事情。
回答
我要告诉你一个秘密。一旦了解了它,我们就会对以下事实感到更好:JavaScript模糊处理仅在通过网络发送脚本时对于节省带宽非常有用。
源代码不值得窃取。
我知道这是对自我的一种震惊,但是我可以自信地说这句话,却从未见过我们编写过任何代码,因为在很少发生严重魔术的开发领域之外,所有源代码都是如此。
假设明天,有人在我们家门口丢了一堆DVD,其中包含Windows Vista的源代码。我们将如何处理?当然,我们可以编译它并分发副本,但这仅比复制零售版本多了一步。我们可能会费心地找到并删除许可证检查代码,但这是一些聪明的孩子已经对二进制文件执行的操作。替换徽标和图形,假装我们自己编写并作为" Vicrosoft Mista"销售?你会被抓的。
我们可能会花费大量时间阅读代码,尝试理解代码并真正"窃取" Microsoft在开发产品上投入的知识产权。但是你会失望的。我们会发现代码是一系列平凡的决定,一个接一个地做出。有些会比我们想象的要聪明。有些人会让我们摇头,想知道他们在那儿租用什么样的猴子。大多数人只会让我们耸耸肩,然后说:"是的,这就是做法。"
在此过程中,我们将学到很多有关编写操作系统的知识,但这不会伤害Microsoft。
将" Vista"替换为" Leopard",以上几段内容均保持不变。不是Microsoft,而是软件。无论是否查看此网站的源代码,该网站上的一半人都可能会开发出Stack Overflow克隆。他们只是没有。 Firefox和WebKit的源代码可供任何人阅读。现在,从头开始编写自己的浏览器。几年后见。
软件开发是对时间的投资。完全幻想着我们正在做的事情如此特别,以至于没有人可以在不查看来源的情况下克隆它,或者甚至可以在没有可操作(且易于检测)的剪切和粘贴的情况下使他们的工作变得更加容易。