HTML5代码加密问题讨论

正如我们所见,越来越多的HTML5网站大行其道,于是产生一个问题,如何保护我们的代码,保护我们的劳动成果,保护我们的知识产权?HTML5的大部分功能由JavaScript所实现,因为用户是可以查看 JavaScript 源代码的,即使是被压缩之后的,所以问题归结到我们是否需要深入研究JS的代码加密问题?

我觉得JavaScript从诞生起就不应该作为一种被保护的代码,因此你才会看到大量的JavaScript库都以开源方式发布,需要保护的代码是服务端的代码(防止你不想要的漏洞挖掘行为)和服务器的安全。

举个不恰当的例子,优秀的JavaScript代码之于盗取代码的人而言就像名画之于临摹画作的人,你需要做的是把画做好就行,别人临摹反而是对你“画作”的一种肯定。因此,防止别人盗取要做的不是把画给抹掉,而是用法律武器(如果你想非开源并保护你代码版权的话)。而虚拟机的话,JavaScript执行的宿主环境浏览器本来就可以看做一个虚拟机,除非把JavaScript弄成编译型语言,否则并无法做到源代码直接查看,但是这又会丧失了JavaScript本身优秀的动态特性。

同样作为编译型语言的C#、java等依然可以反编译出非常易读的代码(例如C#的反编译工具reflector),就算是C语言在编译后也可以反汇编为汇编代码,只要你有恒心,任何逆向工程都是可以的。

因此,只要代码是在本地执行的,那就不存在绝对的代码保护。JavaScript现有的保护机制主要为混淆合并等,但是更多这种工具(例如closure compiler)的初衷是用于减小JavaScript体积而不是用于混淆代码,而某些混淆加密工具反而会增大js体积,这在实践中是不可取的。

文章引用知乎网友的回答,感觉回答的不错,遂发文在此。

来源:houoop