独家供稿:移动Labs
HTML5应用采用的仍然是Javascript(JS)、HTML、CSS 等Web语言,因而其代码保护就是这些Web代码的保护,而HTML5应用主要功能一般采用JS实现,因此JS代码就成了保护重点。
然而,似乎Web语言的设计者们根本没考虑过保护代码,或许因为他们认为互联网的核心价值不是代码,而是业务数据、是流量,这样更有利于互联网Web服务的发展。
但开发者似乎不这么认为。我和开发者交流BAE/Widget/HTML5等话题时,必不可少的问题就是如何保护代码。代码保护是许多Web开发者的一块心病。
Web语言是解析执行,即代码需要明文下载到客户端(如浏览器),同时可以很容易的进行调试,因而代码保护比较困难。
当然,也有一些解决方案是将Web代码编译成二进制文件(如下图),但由于这方面没有业界规范,因而需要客户端支持该文件的解析,其通用性成问题。
![程宝平:HTML5漫谈(7)——如何保护HTML5应用代码 程宝平:HTML5漫谈(7)——如何保护HTML5应用代码](http://labs.chinamobile.com/upload/superblog_287/20/binary.gif)
目前PhoneGap之类的混搭应用模式(native+html5)大行其道,给了这种代码保护方法很好的生存环境。即:可以将负责解析经过加密或编译的Web代码与解析模块一起打包成Native应用。
当然,最流行、折中的HTML5代码保护办法仍代码混淆,而由于应用的主要功能一般通过JS实现,因而这里主要介绍JS代码的混淆。
代码混淆简单地说是对代码进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,但难以阅读。一般代码混淆器会将代码中的所有变量、函数、类的名称变为简短的英文字母代号,删去代码注释。
JS代码混淆器主要是主要分在线和离线两大类。一般开发者比较倾向离线代码混淆器(因为使用在线混淆器需要将代码提交到网站上),这里介绍几个比较不错的,供参考:
1.Jasob
网址:http://www.jasob.com/
功能强,能对Javascript、HTML、CSS文件进行混淆,可以选择变量的混淆程度等各种功能。当然也具有非常强的代码压缩能力。
但是,但是,是收费的共享软件,没用几天就过期了。。。
各位如果有免费使用的各种方法,别忘了和我分享。
![程宝平:HTML5漫谈(7)——如何保护HTML5应用代码 程宝平:HTML5漫谈(7)——如何保护HTML5应用代码](http://labs.chinamobile.com/upload/superblog_287/29/jasob11.gif)
![程宝平:HTML5漫谈(7)——如何保护HTML5应用代码 程宝平:HTML5漫谈(7)——如何保护HTML5应用代码](http://labs.chinamobile.com/upload/superblog_287/23/E4BBA3E7A081E6B7B7E6B786.gif)
2.Javascript Obfuscator
网址:http://www.javascript-source.com/javascript-obfuscator.html
支持JS混淆和代码压缩,简单好用。各种编码字符替换,混淆的代码更加晦涩。
但是、但是,也是收费的共享软件,而且不支持中文字符集,不知是否因为是试用版本。
![程宝平:HTML5漫谈(7)——如何保护HTML5应用代码 程宝平:HTML5漫谈(7)——如何保护HTML5应用代码](http://labs.chinamobile.com/upload/superblog_287/11/JSO2.gif)
![程宝平:HTML5漫谈(7)——如何保护HTML5应用代码 程宝平:HTML5漫谈(7)——如何保护HTML5应用代码](http://labs.chinamobile.com/upload/superblog_287/16/JSO3.gif)
3. YUI Compressor
网址:http://yuilibrary.com/projects/yuicompressor/
Yahoo出品的混淆压缩工具,据说jQuery就是用它混淆压缩的。免费、免费!
但是、但是,质量一般,还是用命令行的。 也有兄弟基于它做了可视化版本:
http://cloud.github.com/downloads/tinyms/jscompressor/JsCompressor.exe
![程宝平:HTML5漫谈(7)——如何保护HTML5应用代码 程宝平:HTML5漫谈(7)——如何保护HTML5应用代码](http://labs.chinamobile.com/upload/superblog_287/26/JSC1.png)
不过无论是代码混淆还是编译,都是防君子不防小人。因为,即使JAVA、C#等编译型语言,都可以反编译出非常易读的代码。