南通iOS開發(fā)培訓(xùn)基礎(chǔ)課程教學(xué)
82 2020-04-16
南通iOS開發(fā)培訓(xùn)基礎(chǔ)課程教學(xué) 為了保護(hù)用戶數(shù)據(jù),需要考慮兩個(gè)方面:(1)使用正確的數(shù)據(jù)存儲(chǔ)解決方案;(2)在輸入數(shù)據(jù)時(shí)保護(hù)數(shù)據(jù)。鑰匙串(Keychain)是蘋果公司開發(fā)的密碼管理系統(tǒng),存在于蘋果公司的macOS電腦操作系統(tǒng)和iOS移動(dòng)操作系統(tǒng)。蘋果公司嚴(yán)格規(guī)定不允許在不同iOS應(yīng)用程序之間共享鑰匙串項(xiàng)目,這意味著iOS 鑰匙串項(xiàng)目只能由創(chuàng)建它們的應(yīng)用程序訪問。因此在iOS開發(fā)者在開發(fā)應(yīng)用時(shí)候,用戶的登錄、密鑰和密碼應(yīng)存儲(chǔ)在鑰匙串中。
核心數(shù)據(jù)(Core Data)是蘋果公司為開發(fā)者的提供的持久性數(shù)據(jù)庫(kù)開發(fā)接口框架,具有基礎(chǔ)SQLite數(shù)據(jù)庫(kù)的功能。有些開發(fā)者會(huì)將用戶的敏感數(shù)據(jù)存放在核心數(shù)據(jù),這是很危險(xiǎn)的,因?yàn)槟J(rèn)情況下,當(dāng)應(yīng)用程序解鎖時(shí)SQLite不會(huì)加密。蘋果公司提供的“數(shù)據(jù)保護(hù)”的功能僅僅在設(shè)備被密碼鎖定時(shí)候,它才會(huì)對(duì)沙箱進(jìn)行加密。
另一方面要保護(hù)用戶的輸入。如果用戶使用簡(jiǎn)體中文輸入法鍵盤,輸入英文字符和數(shù)字字符的用戶名和密碼時(shí),會(huì)自動(dòng)啟動(dòng)系統(tǒng)輸入法自動(dòng)更正提示,然后用戶的輸入記錄會(huì)被以明文的形式緩存下來(lái),其他應(yīng)用可以很方便讀取從手機(jī)相關(guān)目錄,獲得字符串輸入記錄[7],開發(fā)者應(yīng)注意關(guān)閉自動(dòng)更正,屏幕截圖存在類似的情況,當(dāng)應(yīng)用程序進(jìn)入后臺(tái)時(shí),系統(tǒng)會(huì)截取屏幕截圖。如果用戶輸入敏感數(shù)據(jù)并且在屏幕上可見,需要在應(yīng)用程序進(jìn)入后臺(tái)之前實(shí)現(xiàn)屏蔽屏幕的機(jī)制。
蘋果公司采用了App Transport Security迫使開發(fā)人員必須使用SSL(Secure Socket Layer)。SSL雖讓相對(duì)安全,但是通過(guò)ARP緩存投毒(cache poisoning) 或者DNS污染的方法也可以實(shí)現(xiàn)中間人攻擊[8]。移動(dòng)用戶每天都會(huì)接觸到很多不安全的無(wú)線網(wǎng)絡(luò),SSL鎖定確保應(yīng)用程序僅與指定的服務(wù)器本身通信。SSL鎖定的先決條件之一是在應(yīng)用程序包中保存目標(biāo)的服務(wù)器的SSL證書[9]。應(yīng)用程序在配置SSL鎖定會(huì)話時(shí)可以用兩種方式:利用蘋果提供的網(wǎng)絡(luò)訪問接口NSURLSession、第三方庫(kù)AlamoFire或者AFNetworking。
使用NSURLSession鎖定SSL有點(diǎn)麻煩,開發(fā)者沒有辦法把已經(jīng)鎖定的證書放到一個(gè)數(shù)組中以便于讀寫操作,也不能自動(dòng)終止與本地證書不匹配的響應(yīng),而且,需要手動(dòng)地檢查每一個(gè)由NSURLSession建立的SSL鎖定。多數(shù)開發(fā)者目前會(huì)使用前面提到的兩個(gè)庫(kù),它們已經(jīng)封裝了很多功能,使用更為簡(jiǎn)單方便。以使用AlamoFire庫(kù)為例,先創(chuàng)建一個(gè)將域名映射到ServerTrustPolicy實(shí)例,用這個(gè)實(shí)例初始化一個(gè)ServerTrustPolicyManager對(duì)象,由這個(gè)對(duì)象創(chuàng)建SSL鎖定的管理者(Manager)實(shí)例,最后調(diào)用ServerTrustPolicy.certificatesInBundle()一個(gè)方法就可以返回所有的證書。
防止逆向工程一個(gè)方法就是盡量采用Swift語(yǔ)言開發(fā)應(yīng)用程序。 Swift是一種比Objective-C更新的語(yǔ)言,因此逆向工程工具的做得不是很好。還應(yīng)該使用安全的方法來(lái)存儲(chǔ)特定環(huán)境的應(yīng)用程序密鑰,比如使用Cocoapods密鑰。其他的方法包括使用代碼混淆、代碼反調(diào)試技術(shù)、誤導(dǎo)性方法名稱、為攻擊者創(chuàng)建陷阱和偽造方法等等。這種方法是一把雙刃劍:迷惑了敵人的同時(shí),使得自己的代碼更難維護(hù),開發(fā)更慢,更容易出錯(cuò)。
南通iOS開發(fā)培訓(xùn)基礎(chǔ)課程教學(xué) 在iOS應(yīng)用發(fā)布到蘋果應(yīng)用商店之前,必須對(duì)應(yīng)用進(jìn)行安全審核。并不一定非得花大量資金聘請(qǐng)外部黑客團(tuán)隊(duì)做攻防測(cè)試。開發(fā)者在開發(fā)過(guò)程中重視上述三個(gè)常見的“坑”,可以大大減少用戶敏感數(shù)據(jù)泄露的風(fēng)險(xiǎn)。
掃一掃
獲取更多福利
獵學(xué)網(wǎng)企業(yè)微信
獵學(xué)網(wǎng)訂閱號(hào)
獵學(xué)網(wǎng)服務(wù)號(hào)