一直有人問HTML加密混淆怎么做掷邦,其實這在業(yè)內(nèi)是早已很多人研究過的課題白胀。
假日期間整理一篇文章分享給大家。
我們先理下需求抚岗,加密的目的是什么或杠?加密到什么級別?為此我們可以犧牲什么宣蔚?
我們知道這個世界不存在絕對的安全向抢,加密會被破解、混淆會被反混淆胚委。
技術(shù)小白挟鸠、開發(fā)者、黑客亩冬,是完全不同的級別艘希,防范不同級別的人策略都不一樣。
防范力度越大硅急,投入代價也越大覆享,比如聘請專業(yè)的安全公司。
除了投入铜秆,我們還需要考慮程序的執(zhí)行性能和用戶體驗淹真。
加密的代碼在運行時必須解密,混淆后尤其是混淆HTML后连茧,程序的執(zhí)行性能會下降核蘸。
是否真的有必要做這類的源碼保護巍糯,還需要謹慎取舍。
一般而言客扎,前端的代碼祟峦,負責的是用戶體驗,后端的代碼徙鱼,負責更安全的數(shù)據(jù)處理宅楞。
前端不要涉及泄漏太多涉密信息,那么加密的意義不是特別大袱吆。
我很少在前端代碼里看到值得保護的內(nèi)容厌衙,比如高深的算法,很多代碼是沒必要犧牲用戶體驗來保護的绞绒。
但有些前端代碼涉及最終用戶的數(shù)據(jù)安全婶希,此時還是要努力做數(shù)據(jù)保護的。
接下來具體分析幾種手段蓬衡。
不要在前端放敏感數(shù)據(jù)
這個聽起來是廢話喻杈,但真的很重要。
有些開發(fā)者在手機端明文存用戶的密碼狰晚,這是非常危險的事情筒饰。
即使是原生開發(fā),一旦手機被root壁晒,也會造成數(shù)據(jù)泄漏瓷们。更何況HTML5開發(fā)。
比較好的做法是手機端存token讨衣,而不是密碼换棚,這里有篇文章專門介紹這塊,涉及做登錄的開發(fā)者推薦仔細看看設計基于HTML5的APP登錄功能及安全調(diào)用接口的方式(原理篇)js反镇、css壓縮
壓縮不是加密固蚤,也不是混淆。但壓縮后的js文件歹茶,往往也具有混淆的功能夕玩。
js、css壓縮是很常見的技術(shù)惊豺,我們經(jīng)沉敲希看到各種框架的文件名是xxx.min.js,xxx.min.css尸昧。
使用合適的js揩页、css壓縮方案,可以減少文件體積烹俗、提高載入速度爆侣,最重要的是萍程,它還能加快程序的執(zhí)行性能。簡直是有百利而無一害兔仰。
壓縮js比較常用的工具是yahoo的YUI混淆茫负,在HBuilder里點菜單工具-插件安裝,里面有YUI compress乎赴,可以壓縮js和css忍法。
如果js、css比較大榕吼,發(fā)布前壓縮下是比較推薦的做法饿序。HTML、js友题、css混淆
壓縮雖然也能混淆嗤堰,但不是以讓別人看不懂為目的戴质,混淆是真正以別人看不懂為目的度宦。
但是這樣的混淆就不像壓縮那么有百利而無一害了,它會降低程序執(zhí)行性能告匠。
一些開發(fā)者不希望發(fā)行包解壓后可以直接看到源碼戈抄,那么此時可以使用混淆方案。
網(wǎng)上搜索HTML混淆后专,資料和工具都非常多划鸽。
原理都是類似的,js代碼變成亂七八糟的字符串戚哎,然后用eval執(zhí)行裸诽,HTML代碼變亂七八糟字符串,用document.write或innerHTML執(zhí)行型凳,css也可以動態(tài)的在document.write里寫<style>丈冬。
這些工具有免費也有商業(yè)的,一般越商業(yè)的越難被反混淆甘畅。
這個是免費的在線混淆工具 http://www.myobfuscate.com
這個是比較知名的商業(yè)工具埂蕊,http://www.jasob.com
其實大家也可以根據(jù)原理自己寫混淆算法。
混淆也是一個有年頭的成熟技術(shù)疏唾,比如Google在保護gmail的前端代碼時蓄氧,也是通過混淆來保護的。
不管是壓縮還是混淆槐脏,使用grunt來做發(fā)布是不錯的方式喉童,開發(fā)后一鍵調(diào)用grunt處理,非常便捷顿天。
HBuilder在原生層面支持js混淆堂氯,性能高于前端混淆重抖。詳情下面第6點。防止webkit remote debug祖灰,即防止瀏覽器控制臺調(diào)試
Android4.4及以上和iOS是支持webkit remote debug的钟沛,在HBuilder的教程里也有如何使用chrome調(diào)試Android應用,和使用safari調(diào)試iOS應用的教程局扶。
在HBuilder開發(fā)的App里恨统,manifest.json里下的plus-distribute下有一個debug標簽,標記為false后打包(可視化界面里也有配置)三妈,這樣的包運行在手機上時webview會阻止瀏覽器的遠程調(diào)試請求畜埋。
如果你想調(diào)試,那么把debug改為true后再打包畴蒲。
當然有些Android rom不是很規(guī)范悠鞍,并不能阻止調(diào)試,這屬于rom的bug模燥。
另外注意只有打包才能防調(diào)試咖祭,真機運行是不能阻止調(diào)試的。專業(yè)加密加固加殼服務
由于Android的特殊性蔫骂,針對apk出現(xiàn)了加固么翰、加殼產(chǎn)業(yè),這也是業(yè)內(nèi)常見的apk保護方案辽旋。
很多應用市場都提供加固服務浩嫌,比如360手機助手的加固。
還有一批專業(yè)公司如愛加密补胚,里面有免費的基礎安全保障服務码耐,也有收費的高級安全保障服務。
這里還有一個防止apk解壓的小技巧:http://www.52pojie.cn/thread-287242-1-1.htmlHBuilder提供的原生js混淆
在HBuilder的alpha版(day build)里溶其,官方提供了原生層面的js混淆骚腥。(從HBuilder8.8起,正式版也支持了這個功能)
這種混淆的性能比純前端混淆的性能要更好握联,反編譯的難度也更大桦沉。但有些限制和使用注意:
Android4以下的手機不能運行加密后的js。
iOS若配置wkWebview金闽,則不能運行加密后的js纯露。
具體使用方式是在打包界面,可以選擇需要加密的js文件代芜,然后打包即可埠褪。如下圖:
最后,這篇文章對于前端的代碼保護也講的非常專業(yè),值得大家學習http://div.io/topic/1220 (轉(zhuǎn)載)