# 介绍

# “坏应用”滥用存储权限

由于目前的 Android 系统对于存储权限设计过于简单,许多“坏应用”都有滥用存储权限的行为。

要解释清楚这个问题,我们首先需要介绍 Android 系统的存储空间的设计。

Android 系统对于存储空间的设计很美好:

/storage/emulated/0
├───Android
│   ├───data/com.example  <---- 不需要权限
│   ├───media/com.example <---- 不需要权限
│   └───obb/com.example   <---- 不需要权限
├───DCIM
├───Donwload
├───Pictures
└───...
  • DCIM Donwload Pictures 等公共文件夹

    用于保存图片、下载的文件等,需要存储权限,只能被用户主动删除。应用也可根据需求建立自己的文件夹。

  • Android 中的文件夹

    用于保存应用自身的数据及缓存等,不需要权限,在清除数据和卸载后被删除

但是,问题出在存储权限只能选择授予或拒绝。一旦授予,应用就可以读取及写入所有的文件夹

这被许多“坏应用”及“坏 SDK”滥用。它们会请求存储权限,甚至没有权限就拒绝运行。它们需要保存追踪用户的标识,避免在卸载后被删除。另外,多个这样的应用还可以借此共享标识。这在来自中国大陆等用户隐私意识淡薄的地区的应用中非常常见。

在下面的例子中你可以看到,许多“坏应用”建立一堆奇奇怪怪的文件夹,甚至以“SystemConfig”命名来让用户误以为是系统文件。

滥用存储空间的例子
滥用存储空间的例子

许多时候用户只能因为需要使用“发送图片”等功能而被迫授予它们存储权限。

〔1〕 另外还有 /data/user 可供保存应用自身数据,但与主题无关,因此未作说明

〔2〕 Android 系统提供了用户可以指定授权特定的文件/文件夹的方式,但鲜有应用使用

# 存储空间隔离

为了解决上面这个问题,我们创造了这个应用——存储空间隔离。

用户可以为特定的应用启用隔离,应用将不再可以使用真实的存储空间。

/storage/emulated/0
├───Android/data/com.example
│   └───sdcard   <---- 应用可见的存储空间
└───...

此外,应用可以访问哪些文件夹都可以指定。关于具体的使用方式,请阅读后续的文档。