# 介紹

# 「壞應用程式」濫用儲存權限

由於目前的 Android 系統對於儲存權限設計過於簡單,許多「壞應用程式」都有濫用儲存權限的行為。

要解釋清楚這個問題,我們首先需要介紹 Android 系統的儲存空間的設計。

Android 系統對於儲存空間的設計很簡單〔1〕

/storage/emulated/0
├───Android
│   ├───data/com.example  <---- 不需要權限
│   ├───media/com.example <---- 不需要權限
│   └───obb/com.example   <---- 不需要權限
├───DCIM
├───Donwload
├───Pictures
└───...
  • DCIM Donwload Pictures 等公共資料夾

    用於儲存圖片、下載的檔案等,需要儲存權限,只能被使用者主動刪除。應用程式也可根據需求建立自己的資料夾。

  • Android 中的資料夾

    用於儲存應用程式自身的資料及快取等,不需要權限,在清除資料和解除安裝後被刪除

但是,問題出在儲存權限只能選擇授予或拒絕。一旦授予,應用程式就可以讀取及寫入所有的資料夾

這被許多「壞應用程式」及「壞 SDK」濫用。它們會請求儲存權限,甚至沒有權限就拒絕執行。它們需要儲存追蹤使用者的標識,避免在解除安裝後被刪除。另外,多個這樣的應用程式還可以藉此共享標識。這在來自中國大陸等使用者隱私意識淡薄的地區的應用程式中非常常見。

在下面的例子中你可以看到,許多「壞應用程式」建立一堆奇奇怪怪的資料夾,甚至以「SystemConfig」命名來讓使用者誤以為是系統檔案。

濫用儲存空間的例子
濫用儲存空間的例子

許多時候使用者只能因為需要使用「傳送圖片」等功能而被迫授予它們儲存權限〔2〕

〔1〕 另外還有 /data/user 可供儲存應用程式自身資料,但與主題無關,因此未作說明

〔2〕 Android 系統提供了使用者可以指定授權特定的檔案/資料夾的方式,但鮮有應用程式使用

# 儲存空間隔離

為了解決上面這個問題,我們創造了這個應用程式——儲存空間隔離。

使用者可以為特定的應用程式啟用隔離,應用程式將不再可以使用真實的儲存空間。

/storage/emulated/0
├───Android/data/com.example
│   └───sdcard   <---- 應用程式可見的儲存空間
└───...

此外,應用程式可以訪問哪些資料夾都可以指定。關於具體的使用方式,請閱讀後續的文件。