IOS App Sandbox 工作機(jī)制

提到 iOS 也許有人聽說過一個名詞 --- Sandbox。那 Sandbox 到底是一個什么東西?它到底有什么作用?本文將就這些問題做出說明,讓我們對 Sandbox 有所了解。

為了方便,IOS App Sandbox 在本文中或被簡稱為 應(yīng)用程序沙盒,沙盒 或者 沙箱 等。

在 iOS 系統(tǒng)中(macOS 同樣存在),每個應(yīng)用程序都有一個屬于自己的存儲空間,用于存儲圖像、圖標(biāo)、聲音、文本、屬性列表等,這個存儲空間就是 沙盒。

沙盒具有以下幾個特點(diǎn),

  1. 每個應(yīng)用程序都有自己的存儲空間。
  2. 應(yīng)用程序不能翻過自己的圍墻去訪問別的存儲空間的內(nèi)容。
  3. 應(yīng)用程序請求的數(shù)據(jù)都要通過權(quán)限審核,沒有授權(quán)的訪問會被拒絕。

上述特點(diǎn)概括起來就是:因?yàn)樯澈械拇嬖?,?yīng)用程序只能讀寫自己沙盒的文件,不能訪問其他應(yīng)用程序的沙盒,不能進(jìn)行程序間通信(除非通過URL Scheme 方法)。

通過下圖,能否幫助理解什么是沙盒?沙盒是 IOS 的一種安全體系,應(yīng)用程序的所有操作都要通過它來執(zhí)行,最核心點(diǎn)在于沙盒對應(yīng)用程序執(zhí)行的各種操作有權(quán)限限制。

sandbox

IOS 沙箱被封裝在 libsandbox.dylib 靜態(tài)庫中,它為每個進(jìn)程分配空間和權(quán)限配置,使用TrustedBSD API 托管和通信,暗盒負(fù)責(zé)關(guān)閉代碼控件,明盒負(fù)責(zé)打開代碼控件。它啟用的過程如下,

  1. sandbox_init 通過 libsandbox.dylib 轉(zhuǎn)換為二進(jìn)制傳遞給 kernel mac syscall TrustedBSD。
  2. 將 sandbox_init 的請求發(fā) sandbox.kext 的擴(kuò)展,擴(kuò)展為當(dāng)前進(jìn)程安裝證書,然后返回安裝結(jié)果。
  3. 如果安裝成功,每次進(jìn)程的請求,都會被 trusted bsd 發(fā)送給 sandbox.kext 去匹配之前安裝的證書規(guī)則。如果證書不匹配的話,則安裝失敗。

說實(shí)話上述這些內(nèi)容都會網(wǎng)上資料做的拼湊和整合,其實(shí)沒有涉獵過 IOS 開發(fā)可能真的很難從本質(zhì)上理解沙箱,待以后有機(jī)會深入了解之后再對沙箱原理做深入解讀。


END

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,595評論 30 472
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實(shí)...
    香橙柚子閱讀 24,725評論 8 183
  • 靈感來源依舊是罐頭哥哥昨日的五年日記題目:你會看每周星座運(yùn)勢嗎? 或許這個靈感來源和標(biāo)題以及和我所說的內(nèi)容并沒有什...
    蕉鹿夢閱讀 614評論 1 0
  • 我們都擅長口是心非,卻又希望對方有所察覺并且作出自己期待的反應(yīng)??涩F(xiàn)實(shí)并未讓你滿意。 于是逐次的拌嘴、不服氣、吵架...
    星星茶閱讀 417評論 0 0
  • 2016 07 16 小茵實(shí)習(xí)的第一天 本以為最優(yōu)秀的自己才能被選中去銀行營業(yè)部實(shí)習(xí) 沒想到 那天早上 和她一起出...
    阿拉蕾的小天地閱讀 168評論 0 0

友情鏈接更多精彩內(nèi)容