天天看點

如何保護javascript代碼

HTML5應用采用的仍然是Javascript、HTML、CSS 等Web語言,因而其代碼保護就是這些Web代碼的保護,而HTML5應用主要功能一般采用JS實作,是以JS代碼就成了保護重點。然而,似乎Web語言的設計者們根本沒考慮過保護代碼,或許因為他們認為網際網路的核心價值不是代碼,而是業務資料、是流量,這樣更有利于網際網路Web服務的發展。但開發者似乎不這麼認為。我和開發者交流BAE/Widget/HTML5等話題時,必不可少的問題就是如何保護代碼。代碼保護是許多Web開發者的一塊心病。Web語言是解析執行,即代碼需要明文下載下傳到用戶端(如浏覽器),同時可以很容易的進行調試,因而代碼保護比較困難。當然,也有一些解決方案是将Web代碼編譯成二進制檔案(如下圖),但由于這方面沒有業界規範,因而需要用戶端支援該檔案的解析,其通用性成問題。

目前PhoneGap之類的混搭應用模式(native+html5)大行其道,給了這種代碼保護方法很好的生存環境。即:可以将負責解析經過加密或編譯的Web代碼與解析子產品一起打包成Native應用。當然,最流行、折中的HTML5代碼保護辦法仍代碼混淆,而由于應用的主要功能一般通過JS實作,因而這裡主要介紹JS代碼的混淆。代碼混淆簡單地說是對代碼進行重新組織和處理,使得處理後的代碼與處理前代碼完成相同的功能,但難以閱讀。一般代碼混淆器會将代碼中的所有變量、函數、類的名稱變為簡短的英文字母代号,删去代碼注釋。

JS代碼混淆器主要是主要分線上和離線兩大類。一般開發者比較傾向離線代碼混淆器(因為使用線上混淆器需要将代碼送出到網站上),這裡介紹幾個比較不錯的,供參考:

1.Jasob 網址:http://www.jasob.com/ 功能強,能對Javascript、HTML、CSS檔案進行混淆,可以選擇變量的混淆程度等各種功能。當然也具有非常強的代碼壓縮能力。 但是,但是,是收費的共享軟體,沒用幾天就過期了。。。 各位如果有免費使用的各種方法,别忘了和我分享。

2.Javascript Obfuscator 網址:http://www.javascript-source.com/javascript-obfuscator.html 支援JS混淆和代碼壓縮,簡單好用。各種編碼字元替換,混淆的代碼更加晦澀。 但是、但是,也是收費的共享軟體,而且不支援中文字元集,不知是否因為是試用版本。

3. YUI Compressor 網址:http://yuilibrary.com/projects/yuicompressor/ Yahoo出品的混淆壓縮工具,據說jQuery就是用它混淆壓縮的。免費、免費! 但是、但是,品質一般,還是用指令行的。 也有兄弟基于它做了可視化版本: http://cloud.github.com/downloads/tinyms/jscompressor/JsCompressor.exe

不過無論是代碼混淆還是編譯,都是防君子不防小人。因為,即使JAVA、C#等編譯型語言,都可以反編譯出非常易讀的代碼。

參考資料: http://labs.chinamobile.com/mblog/287_182024

繼續閱讀