我应该担心“ Javascript盗版”吗?


11

如果我编写客户端Javascript应用程序(与服务器进行一些交互),如何防止人们将Javascript文件复制到自己的站点?我应该吗?

Answers:


34

你应该在乎吗?没有。

为什么?因为您无能为力。

有些人可以预料地建议混淆。这适用于Java和.Net,但是Python,Javascript和Perl都是纯文本,因此您几乎无能为力。您网站中的价值无疑是服务器端,因此不必担心Javascript。


1
如果我能从反汇编的(可能是)混淆的Java中弄清楚我需要知道的内容,我认为我可以管理Javascript,而且我也不是这种“黑客”或逆向工程的专家。“信息渴望自由”(我在某处听到的报价)。

2
JavaScript具有天生的防御功能:它与服务器端代码绑定,无法访问。混淆是安慰剂。这也使诊断得到的错误报告更加困难。如果有人要剥夺您的

1
还有什么很酷的问题呢?

2
否决票使我发笑。最好将Javascript用作增强您网站的实用工具。唯一值得保护的代码是公开有关您网站和公司内部运作信息的代码。首先,这些都不属于客户端脚本!

1
@吉姆:我不知道。我认为目前的计数为17赞成票,8赞成票,由于处于每日代表上限,我从这个答案的代表是... -16。

14

您能做的最好的事情就是混淆代码,以便其他人很难修改它。当然,您保留原件的副本。

另外,混淆的代码应该更小,因此加载起来更快。


这就是所谓的Javascript最小化,不是吗?
乔纳森·莱夫勒

4
实际缩小
马特·布里格斯

9

你为什么担心 我认为可能有两个原因:1)您正在编写商业JavaScript库。解决方案:获得另一个商业计划,JavaScript库通常是免费的。也许您可以在小型企业中赚钱,但是他们极有可能不会使用非法复制的代码。

2)您担心竞争对手会复制您的网站。如果这样做,您可以放心,您将永远领先于他们。他们更有可能编写自己的代码,并复制您网站的外观和行为,除非获得愚蠢的软件专利(例如亚马逊一键式购物),否则您将无法从中受益。

IOW,别担心。张贴版权声明,要求人们告诉您他们是否使用您的东西。如果有足够的人这样做,请使用您已经创建了一个有用的库这一事实来在极客之间赢得信誉,从长远来看,这可能是有益的。


这是一个Web应用程序,而不是一个库:)。感谢#2。

6

否。请勿尝试和“保护”客户端脚本语言。混淆不起作用。缩小有其用途(但反盗版不是其中之一)

我还建议您不要减少代码,除非您每天获得数千次点击,否则每个请求的额外几千字节会有明显的不同(并且只有在正确压缩了所有使用的图像后才这样做,这样可以节省您的时间)远远超过几个KB,请正确设置缓存等等)。

即使您对Javascript进行了最小化/混淆处理,人们仍然可以轻松地将其复制到自己的站点。修改起来会有些困难,但是取决于脚本的功能,这可能并不重要。例如,人们提到的WMD编辑器已精简供公众使用。

混淆和缩小可以是相似的,但如果你要正确地混淆代码,你将不得不重新编写基本上它的大段让人很难理解。这使得代码更复杂,远远难以应付(对如果您的Javascript出现bug,则会防止盗版,因为没有人会想要使用(或窃取)它。.但是,那不是很好。

关于Javascript的一大优点是,任何人都可以右键单击/查看源代码,并通过实时查看工作代码来学习Javascript。正确的语言

我建议您在所有.js文件和<script>块的开头加上注释(包括您的信息(名称,网站)和某种许可)。根据代码的不同,也许会发出一个通知,说“如果您在项目中使用全部或部分代码,请让我知道!” 可能比“永远不要将此代码用于任何其他目的!”更有效。


4

您可以混淆(或至少减少代码)以阻止这种情况(尽管对于有时间的人来说,这并非不可阻挡。例如,StackOverflow对WMD编辑器的混淆)(但这是有充分理由的!)。

实际上,您放置在前端的任何代码都将是公开的,并可供所有人查看/使用。


WMD编辑器并未被混淆,只是被缩小了。

最小化JavaScript还会产生混淆的副作用。var va = fa(); 以及被混淆。
Unkwntech

4

为什么要担心呢?如果您的脚本值得窃取,则可以改为开放源代码并获得磨练它们的帮助。


除此之外,您还可能为他们赢得信誉和良好的公关。如果您不能让这些东西在常规的商业意义上对您有用,请看看如何使它们以其他方式为您工作。
乔恩·霍普金斯

4

因为它是一种始终以源代码形式提供的解释性语言,所以您不能真正做到这一点。如果海盗有足够的动机,那么即使混淆也不会有太大帮助。

(案例:StackOverflow WMD编辑器,从严格意义上讲,可以看作是盗版,尽管我知道Jeff和Dana只是出于好意)


4

不。您完全不用担心。

如果您的业务依赖于JavaScript代码的保密性,则存在一些严重的问题。

否则,别打扰。也许您应该尝试最小化JavaScript代码以使页面加载更快。


3

我使用GWT(Google Web工具包)来编写Web应用程序,其中的代码全部用Java编写,并且可以使用以Java为中心的工具进行调试和测试,但是可以转换为JavaScript进行发布。

当不在PRETTYDETAILED模式下时,GWT生成的JavaScript会进行高度优化和混淆,从而使其难以进行反向工程。(传统的JavaScript模糊处理程序将提供这些好处的一部分-但优化不取决于GWT进行详细的分支修剪和代码路径分析的能力)。

就是说,总的来说,我对混淆的看法为-1-例如,这意味着,即使他们碰巧具有开发技能和FireBug副本,合法客户也无法帮助您解决他们的问题。您是原始作者-您比其他任何人都了解代码,因此比起尝试进行廉价仿制的人,它具有竞争优势。此外,如果有任何这样的竞争对手实际上是在未经许可的情况下从他们偷走的东西中赚取了真钱,那么这将使他们敞开大门,将这些钱(或者可能是三倍的钱)在诉讼中带走;合法而严峻的竞争不会走这条路,为什么还要担心另一种呢?


2

我们在网络应用程序中使用了很多Javascript(和很多服务器端)代码,并且我们选择“模糊处理” Javascript以删除任何空格,换行符等。这不会真正保护您的代码,但是很难阅读和理解,并且很可能其他人不会因为所付出的努力而烦恼。

但是,我们这样做的原因并不在于我们不希望任何人复制部分代码,而是阻止我们向其交付代码的合作伙伴/客户直接在“我们的文件”中进行修改(避免在安装下一个更新时遇到麻烦)...

注意:尽管混淆有一个缺点,但您应该意识到:如果您需要调试该脚本代码,您自己将无法使用混淆的信息,因此,这始终涉及将“可读”文件复制到服务器优先。


2
我不会在编辑器中调用格式化Javascript或使用某种形式的“漂亮打印机”来进行大量工作。减少这些内容对于减少带宽(即最小化)很有用,仅此而已。

如果Javascript文件很大,则需要付出很多努力。另外,“漂亮的打印机”在“一行包含所有代码”类型的文件上不能很好地工作(或根本不能工作)。

1

继续假设任何足够好的javascript都会被其他人所采用,那么仅顺着潮流游泳并充分利用它就如何了?

在其上拍下许可证,以允许使用,而需要例如署名。如果确实需要的话,也许也可以使用非商业条款,例如一些Creative Commons变体。


1

您的大多数应用程序逻辑应在服务器端。Javascript仅应处理GUI内容以及与服务器的简单交互。如果您的Javascript代码包含足够的应用程序逻辑,使您担心有人在窃取它,那么您可能在做错什么。


0

如果您有商业秘密,则可以将代码中最敏感的部分移至ActionScript(Flash)。它与JavaScript本质上是相同的语言,并以标记化形式存储。


0

如果您担心坚定的硬核黑客会窃取您的代码,对不起,您无能为力。但是有一些方法可以使随便的小偷感到不便。一个相对简单的方法是使用XMLHttpRequest和加载一些零件eval()。这可以伪装成(或包含在)获取JSON数据并使用它们填充页面的内容中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.