23

我正在使用 HTMl、CSS 和 JavaScript 编写一个健壮、可扩展且相当复杂的网站引擎。我不希望它被扯掉,我想知道是否有任何方法可以保护源不被客户端查看。

我特别关心 JavaScript,我想知道是否可以通过将其托管在无法直接查看的单独文件中来保护它。我可以完全控制我的网络服务器,并且可以更改任何设置以适应。

4

10 回答 10

37

做完全相反的事情,将你的代码发布为具有 MIT/GPL 许可证的开源代码。将您的(企业)名称附加到代码中,并被称为第一个创建应用程序 X 的人。声誉让您走得更远,然后徒劳地尝试“保护您的代码”。

  1. JS/Html/CSS 通常很容易进行反向工程,他们根本不需要查看您的代码。
  2. 很有可能,您的 JS 创新已经存在,并且是其他人在 2001 年编写的。
  3. 代码越复杂,窃取知识产权就越难,尤其是在开源的情况下。

在涉及 JS/CSS/HTML 的地方保护您的代码确实没有合理的理由,您能做的最好的事情就是通过将其保留在后端来保护您的业务逻辑。

最好的例子,我可以编写自己的 CKEditor 实现(很多人就是这样做的),但是使用 CKEditor 要容易得多,而且每个人都知道它是什么,是谁编写的等等。

或者以谷歌地图为例,周围有很多克隆,但只有一个真正的谷歌地图。哎呀,其他人在 google 之前已经编写了 maps 实现,但 google maps 更有名。

我可以继续举很多例子,为什么试图保护你的代码不仅愚蠢,而且实际上并不聪明……保护业务逻辑是一回事,但通过使用花哨的 smancy 前端代码上市,你实际上可以获得更多收益。 .

于 2010-11-15T22:41:00.823 回答
36

无论您如何混淆代码,任何人都可以通过查看代码来复制您正在做的事情。从头开始编写它可能需要更长的时间,但您对此无能为力。

您唯一真正的保护选择涉及对代码进行版权保护,并可能申请专利。如果您正在做的事情确实与众不同,那么专利可能是最好的选择。

通常,您的应用程序中的价值实际上将在支持区域中。换句话说,如果人们觉得你的存在时间足以支持它,他们就会购买它。在定价时请注意这一点。

你会发现有些人会简单地窃取你的代码并重用它。不要太担心他们,因为他们无论如何都不会付费给客户。相反,让您自己的客户更容易购买和使用您的产品。确保您提供支持;这就是真正价值的来源。

于 2010-11-15T22:06:12.497 回答
18

不,你不能那样做。

一切都进入浏览器(客户端)。你可以用它来混淆 uglify、缩小或诸如此类的东西,但最后它很容易再次“加密”它。

您也无法隐藏它,因为您希望浏览器接收您所有的来源。所以即使你做了一些时髦的动作,比如“加载带有动态脚本标签插入的javascript,然后删除脚本标签”。好吧,这可能对一些没有经验的用户有用,但使用类似的工具Fiddler将再次证明真相。

于 2010-11-15T22:01:35.100 回答
12

你根本做不到。用最小化器混淆你的 javascript 和 CSS 可能是你能得到的最接近的方法。

于 2010-11-15T22:03:33.027 回答
8

好吧,流行的答案是“不要把它放在网上”。但是,您可以将您的 javascript 混淆得如此之多,以至于通常没有人会费心去窃取它。删除函数和变量名等有很长的路要走。一般来说,从头开始会更容易。

于 2010-11-15T22:02:22.917 回答
5

缩小 HTML、CSS 和 JavaScript 会有所帮助,但人们总是可以重新格式化它们。最好的选择是发送给客户的内容与您正在使用的原始内容不同。

这可以通过以下方式实现:

但是,有了所有这些,您只能走这么远。编译你的 JavaScript 会让你更难遵循你的初衷,但如果有人打算对它进行逆向工程,可能还不够困难。

于 2010-11-15T22:09:27.020 回答
5

您可以不将其放在 Internet 上,也可以仅通过 Intranet 对其进行访问;但是没有办法可靠地阻止客户端访问 html/css/JS,而不阻止他们访问站点本身。

混淆将阻止随意尝试和好奇浏览,但不会阻止确定的攻击者/浏览器,因为它都是在客户端实现的。

于 2010-11-15T22:03:41.373 回答
3

您可以使用 JavaScript 混淆器。它会使代码难以阅读。他们仍然可以“撕掉它”,但是很难理解它并因此对其进行修改。您无法完全隐藏代码。

于 2010-11-15T22:04:25.547 回答
2

我对这个问题想了很多,坦率地说,没有什么可以做的。我遇到过的最好的就是使用 JS 编译器。

从理论上讲,我从来没有真正这样做过,但我知道这是可能的,它可能通过一个 1x1 像素的 swf 加载你的 js,而这个 swf 又通过一个加扰器发送。仍然可以解决这个问题,但它变得更加烦人。然后,您可以将 aes 加密代码发送到 swf,在客户端解密(使用 as3crypt 库),然后将其写入浏览器。也就是说,除非您将 swf 用于一系列回调,否则您仍然会遇到问题,即它仍然需要写入浏览器。Firebug 和其他浏览器的 js 控制台将让用户获得“已编译”的 js。当然,也可以编写 AS3 脚本来注册一系列回调...

正如我已经说过的,这比没有假设更重要,虽然我毫不怀疑它可以在田园诗般的情况下工作,但 Flash 是有限的,您需要了解 AS3。当然,好处是这是一种将 js 导入浏览器的方法,而用户无法轻松阅读它。

于 2010-11-15T22:41:22.720 回答
1

我真的不相信有可能对最终用户隐藏 JavaScript 代码,JavaScript 是在客户端而不是服务器端完成的,这意味着它以纯文本形式查看源代码或让第三方程序拦截浏览器、最终用户、需要代码来完成任务。

即使它是加密的,在某个时间点,它也必须是未加密的,浏览器才能完成并显示最终用户将获得代码的任务,除非您完全和完全控制最终用户的隐藏在客户端执行的任何代码的计算机是不可能的。

于 2013-03-17T00:03:23.300 回答