关于HTML加密混淆、源码保护、代码安全,防止解压直接看源码
轉(zhuǎn)載:https://my.oschina.net/1590538xiaokai/blog/478842
摘要: 一直有人問(wèn)HTML加密混淆怎么做,其實(shí)這在業(yè)內(nèi)是早已很多人研究過(guò)的課題。 最近閑暇之余整理一篇文章分享給大家。一直有人問(wèn)HTML加密混淆怎么做,其實(shí)這在業(yè)內(nèi)是早已很多人研究過(guò)的課題。
最近閑暇之余整理一篇文章分享給大家。
我們先理下需求,加密的目的是什么?加密到什么級(jí)別?為此我們可以犧牲什么?
我們知道這個(gè)世界不存在絕對(duì)的安全,加密會(huì)被破解、混淆會(huì)被反混淆。
技術(shù)小白、開(kāi)發(fā)者、黑客,是完全不同的級(jí)別,防范不同級(jí)別的人策略都不一樣。
防范力度越大,投入代價(jià)也越大,比如聘請(qǐng)專業(yè)的安全公司。
除了投入,我們還需要考慮程序的執(zhí)行性能和用戶體驗(yàn)。
加密的代碼在運(yùn)行時(shí)必須解密,混淆后尤其是混淆HTML后,程序的執(zhí)行性能會(huì)下降。
是否真的有必要做這類的源碼保護(hù),還需要謹(jǐn)慎取舍。
一般而言,前端的代碼,負(fù)責(zé)的是用戶體驗(yàn),后端的代碼,負(fù)責(zé)更安全的數(shù)據(jù)處理。
前端不要涉及泄漏太多涉密信息,那么加密的意義不是特別大。
我很少在前端代碼里看到值得保護(hù)的內(nèi)容,比如高深的算法,很多代碼是沒(méi)必要犧牲用戶體驗(yàn)來(lái)保護(hù)的。
但有些前端代碼涉及最終用戶的數(shù)據(jù)安全,此時(shí)還是要努力做數(shù)據(jù)保護(hù)的。
接下來(lái)具體分析幾種手段。
不要在前端放敏感數(shù)據(jù)
這個(gè)聽(tīng)起來(lái)是廢話,但真的很重要。
有些開(kāi)發(fā)者在手機(jī)端明文存用戶的密碼,這是非常危險(xiǎn)的事情。
即使是原生開(kāi)發(fā),一旦手機(jī)被root,也會(huì)造成數(shù)據(jù)泄漏。更何況HTML5開(kāi)發(fā)。
比較好的做法是手機(jī)端存token,而不是密碼,這里有篇文章專門介紹這塊,涉及做登錄的開(kāi)發(fā)者推薦仔細(xì)看看設(shè)計(jì)基于HTML5的APP登錄功能及安全調(diào)用接口的方式(原理篇)
js、css壓縮
壓縮不是加密,也不是混淆。但壓縮后的js文件,往往也具有混淆的功能。
js、css壓縮是很常見(jiàn)的技術(shù),我們經(jīng)常看到各種框架的文件名是xxx.min.js,xxx.min.css。
使用合適的js、css壓縮方案,可以減少文件體積、提高載入速度,最重要的是,它還能加快程序的執(zhí)行性能。簡(jiǎn)直是有百利而無(wú)一害。
混淆js比較常用的工具是yahoo的YUI混淆,在HBuilder里點(diǎn)菜單工具-插件安裝,里面有YUI compress,可以壓縮js和css。
如果js、css比較大,發(fā)布前壓縮下是比較推薦的做法。
HTML、js、css混淆
壓縮雖然也能混淆,但不是以讓別人看不懂為目的,混淆是真正以別人看不懂為目的。
但是這樣的混淆就不像壓縮那么有百利而無(wú)一害了,它會(huì)降低程序執(zhí)行性能。
一些開(kāi)發(fā)者不希望發(fā)行包解壓后可以直接看到源碼,那么此時(shí)可以使用混淆方案。
網(wǎng)上搜索HTML混淆,資料和工具都非常多。
原理都是類似的,js代碼變成亂七八糟的字符串,然后用eval執(zhí)行,HTML代碼變亂七八糟字符串,用document.write或innerHTML執(zhí)行,css也可以動(dòng)態(tài)的在document.write里寫<style>。
這些工具有免費(fèi)也有商業(yè)的,一般越商業(yè)的越難被反混淆。
這個(gè)是免費(fèi)的在線混淆工具?http://www.myobfuscate.com
這個(gè)是比較知名的商業(yè)工具,http://www.jasob.com
其實(shí)大家也可以根據(jù)原理自己寫混淆算法。
混淆也是一個(gè)有年頭的成熟技術(shù),比如Google在保護(hù)gmail的前端代碼時(shí),也是通過(guò)混淆來(lái)保護(hù)的。
不管是壓縮還是混淆,使用grunt來(lái)做發(fā)布是不錯(cuò)的方式,開(kāi)發(fā)后一鍵調(diào)用grunt處理,非常便捷。
防止webkit remote debug,即防止瀏覽器控制臺(tái)調(diào)試
Android4.4及以上和iOS是支持webkit remote debug的,在HBuilder的教程里也有如何使用chrome調(diào)試Android應(yīng)用,和使用safari調(diào)試iOS應(yīng)用的教程。
在HBuilder開(kāi)發(fā)的App里,manifest.json里下的plus-distribute下有一個(gè)debug標(biāo)簽,標(biāo)記為false后打包,這樣的包運(yùn)行在手機(jī)上時(shí)webview會(huì)阻止瀏覽器的遠(yuǎn)程調(diào)試請(qǐng)求。
如果你想調(diào)試,那么把debug改為true后再打包。
當(dāng)然有些Android rom不是很規(guī)范,并不能阻止調(diào)試,這屬于rom的bug。
專業(yè)加密加固加殼服務(wù)
由于Android的特殊性,針對(duì)apk出現(xiàn)了加固、加殼產(chǎn)業(yè),這也是業(yè)內(nèi)常見(jiàn)的apk保護(hù)方案。
很多應(yīng)用市場(chǎng)都提供加固服務(wù),比如360手機(jī)助手的加固,
還有專業(yè)公司如:愛(ài)加密,里面有免費(fèi)的基礎(chǔ)安全保障服務(wù),也有收費(fèi)的高級(jí)安全保障服務(wù)。
后記,有些非專業(yè)安全公司提供的所謂源碼加密服務(wù),其實(shí)是漏洞百出的。
安全無(wú)小事,使用專業(yè)安全服務(wù)產(chǎn)品更可信賴。
總結(jié)
以上是生活随笔為你收集整理的关于HTML加密混淆、源码保护、代码安全,防止解压直接看源码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 家园共育(说一说家园共育的简介)
- 下一篇: SocketLog-微信调试、API调试