目前,大部分的移動應(yīng)用都是需要聯(lián)網(wǎng),與服務(wù)器進行通信,獲取最新的數(shù)據(jù)。一提到網(wǎng)絡(luò),肯定就有大量和安全性相關(guān)的問題出來。所以,對于我們開發(fā)者而言,如何打造一個安全的App,是必須面對的問題。前段時間我專門對iOS移動應(yīng)用安全性方面進行了研究,下面我們分析iOS應(yīng)用中可能會存在的安全風險以及相對應(yīng)的處理方式。
1、網(wǎng)絡(luò)安全
在網(wǎng)絡(luò)請求中,我們經(jīng)常使用兩種請求方式:GET和POST。如果是用GET發(fā)送請求,當我們采用明文的方式給服務(wù)器發(fā)送數(shù)據(jù),數(shù)據(jù)里面還包含一些敏感數(shù)據(jù)如賬號密碼,這些數(shù)據(jù)都是包裝在URL中,并且服務(wù)器的訪問日志會記錄,所以黑客一旦攻破服務(wù)器,可以輕易獲得所有用戶的賬號密碼。POST相對于GET來說,要相對安全一些,我們發(fā)給服務(wù)器的數(shù)據(jù)是包裝在請求體中,不會直接暴露在url中。但是其實POST也是不安全的,在MAC電腦上可以利用Charles軟件(如果在Windows下,可以使用Fiddler軟件)來將自己的電腦設(shè)置成代理服務(wù)器,從而截取應(yīng)用的網(wǎng)絡(luò)請求,所以GET和POST都是不安全的。這時,為了防止賬號密碼泄漏,我們要對其進行加密。加密的方式有很多種,最簡單的就是base64加密,但是base64 過于簡單,很容易破解,不推薦使用。第二種就是md5加密,其核心思想是從給定的數(shù)據(jù)中提取特征碼,不容產(chǎn)生重復(fù),安全性比較高,在計算機安全領(lǐng)域使用的比較廣泛,但是現(xiàn)在也有專門的網(wǎng)站對md5進行破解,為了使MD5加密更安全,我們會進行加鹽,HMac,加時間戳等,提高安全級別和破解難度。第三種就是對稱加密和非對稱加密。非對稱加密:事先生成一對用于加密的公私鑰,客戶端在登錄時,使用公鑰將用戶的密碼加密后,將密文傳輸?shù)椒?wù)器。服務(wù)器使用私鑰將密碼解密。這樣的做法,保證黑客即使截獲了加密后的密文,由于沒有私鑰,也無法還原出原始的密碼。
2、協(xié)議問題
iOS9.0 之前,做網(wǎng)絡(luò)請求時時用http協(xié)議,但是http協(xié)議是不安全協(xié)議,很容易被攻破,在成功破解了通信協(xié)議后,黑客可以模擬客戶端登錄,進而偽造一些用戶行為,可能對用戶數(shù)據(jù)造成危害。像我們平常聽到的游戲代練,刷分,其實是游戲的通信協(xié)議被破解,黑客制作出了代練的機器人程序。在iOS9.0后,蘋果推薦采用https協(xié)議進行網(wǎng)絡(luò)數(shù)據(jù)傳輸。當然,如果自己手上有更好更安全的協(xié)議,可以用自己的。
3、本地文件安全
iOS應(yīng)用的數(shù)據(jù)在本地通常保存在本地文件或本地數(shù)據(jù)庫中。如果對本地的數(shù)據(jù)不進行加密處理,很可能被黑客篡改,所以我們要對重要的數(shù)據(jù)進行加密,根據(jù)重要程度選擇安全性可靠的方式。
4、源代碼安全
應(yīng)用程序上架需要編譯成二進制文件,這些二進制文件也是存在安全隱患。黑客可以通知反編譯工具,對這個文件進行反編譯。對于Objective-C代碼,它常??梢苑磪R編到可以方便閱讀的程度,這對于程序的安全性,也是一個很大的危害。因為通過閱讀源碼,黑客可以更加方便地分析出應(yīng)用的通信協(xié)議和數(shù)據(jù)加密方式。一般我們應(yīng)對的方式給我們的代碼加一些東西,混淆源代碼的內(nèi)容,比如定義一些亂其八糟的宏,比如打亂代碼的順序等。這樣,就算文件被反編譯成功,也需要花大量的時間去破解。