为了方便应用开发者保护应用文件,防止应用数据的泄露,结合应用中不同的应用文件类型,现提供一份应用文件的开发实践建议,开发者在应用开发中可参考实施。

应用开发中涉及文件分类:

应用文件:文件所有者为应用,包括应用缓存文件、应用安装文件、应用高密文件等。

  1. 应用缓存文件:应用缓存文件在沙箱目录的cache目录(对应cacheDir属性),示例如/data/storage/el2/base/haps/entry/cache,用于保存离线数据、图片缓存等,当缓存目录大小超过配额或系统空间达到一定条件时,系统会自动清理该目录下的缓存文件。
  2. 应用安装文件:应用安装后的 HAP 等资源包等安装文件存于沙箱目录的bundle目录(对应bundleCodeDir属性),例如物理路径可能类似/data/storage/el2/base/haps/entry/bundle,该目录下的文件随应用卸载而清理。
  3. 应用高密文件:高安全保护数据(如用户凭证、加密密钥、隐私配置、敏感业务数据,数据访问TOKEN)这些数据建议存储在应用的 “私有存储目录” 中,且优先选择系统推荐的应用沙箱目录、应用沙箱目录由系统自动创建和管理,仅当前应用可访问(其他应用无权限),是高安全保护数据的首选存储位置,具备隔离性和基础安全防护的子目录,避免存放在公共存储目录(易被其他应用访问),结合应用高安全数据的特性建议应用开发过程中把高安全保护数据存储在以下目录:

目录1:偏好设置目录(preferences

  • 用途:存储小体量、键值对格式的敏感配置数据(如用户登录 Token、加密密钥的载体、应用敏感开关配置等)。
  • 优势:系统对该目录下的文件提供基础隔离保护,且 APIPreferences类)简化了数据读写,适合高频访问的轻量敏感数据。
  • 路径特征:应用沙箱目录下的preferences子目录(具体物理路径由系统管理,开发者无需硬编码,通过Context获取)。

目录2:关系型数据库目录(database

  • 用途:存储结构化的敏感业务数据(如用户隐私信息、交易记录、加密后的用户数据列表等)。
  • 优势:基于 SQLite 封装,支持数据加密,结合私有目录的隔离性,安全性更高,适合需结构化管理的中体量敏感数据。
  • 路径特征:应用沙箱根目录下的databases子目录(同样通过Context获取,无需硬编码路径)。

补充场景:应用沙箱的 “自定义加密文件目录”(需配合开发者加密)

若需存储大文件格式的高安数据(如加密后的备份文件、证书文件、敏感附件等),可在应用沙箱的 files目录”下创建自定义子目录,并通过系统提供的加密 API(如Crypto模块)或者应用自有的加密API对文件加密后再存储。

目录:应用私有files子目录

  1. 用途:存储加密后的大体积敏感文件。
  2. 关键要求:必须对文件本身进行额外加密(如 AES-256 加密),因为该目录仅提供“隔离保护”,不默认加密文件内容;加密密钥建议存储在上述“偏好设置目录”或“密钥库(KeyStore)”中(需HarmonyOS 3.0及以上版本支持)。
  3. 获取方式:通过Context.getFilesDir()获取files目录路径,再创建自定义子目录(如“encrypted_data”)。

绝对禁止:避免存储在公共存储目录

系统的公共存储目录(如DocumentsDownloadPictures等)对所有应用可见(需动态权限),绝对不能存放高安数据,否则会导致数据泄露风险。

额外安全建议:

1:对敏感数据采用 “双重保护”:私有目录隔离 + 数据内容加密(使用系统提供的加密API ohos.security.crypto或者应用自有的加密API)。

2:若涉及硬件级安全,可结合系统的“可信执行环境(TEE)”或“密钥库(KeyStore)”存储核心密钥(如加密主密钥),进一步提升安全性。

用户文件:文件所有者为登录到该终端设备的用户,包括用户私有的图片、视频、音频、文档等。用户文件存放在用户目录下,归属于该设备上登录的用户。用户文件存储位置主要分为内置存储外置存储。应用对用户文件的创建、访问、删除等行为,需要提前获取用户授权,或由用户操作完成。

用户文件路径详细说明请参考开发者指南中用户文件章节的详细介绍。

应用开发中可使用到的目录划分:

通常把系统提供给应用常用的目录分为两类目录,用户数据目录(通常对外称为公共目录)和应用沙箱目录。

用户数据目录(公共目录)

  1. 3D目录(Download/Desktop/Documents
  • 桌面:应用或者用户可以把用户类文件存放在桌面目录
  • 下载:应用可以把下载保存的数据存储在此目录
  • 文档:应用或者用户可以把用户类数据存放在文档目录
  • 其它预置目录(如视频,音频,图片目录)
  • 用户自建目录
  • 外设存储目录(U盘,网络邻居,外接硬盘等)

应用沙箱目录:

当前在PC设备上,应用沙箱给文件管理开放了el1/Baseel2/Base目录。

目录的开放策略:

手机/平板设备默认关闭应用沙箱目录、PC设备默认开放应用沙箱目录(el1/Baseel2/Base目录),包含PC专有应用和一多应用,针对目录开放,分别对文件管理应用(系统自带)和非系统自带应用对目录的可访问性总结如下:

客体主体

用户数据目录(3D目录)

应用沙箱目录(el2/Base)

用户数据目录(用户自建目录)

用户数据目录(外设存储目录)

其他预置目录(视频/音频/图片等)

PC文件管理应用

默认可访问

默认可访问(部分)

默认可访问

默认可访问

默认可访问

手机/Pad文管应用

默认可访问

不可访问

默认可访问

默认可访问

默认可访问

生态应用

1. Download/Desktop/Documents等目录预授权后可直接访问(限PC产品)

2. 通过Picker授权访问

1.默认可访问本应用的沙箱目录

2.非本应用的其他应用的应用沙箱目录默认不可访问,沙箱中文件需授权访问(picker授权,应用分享沙箱文件)

通过授权后可访问

通过授权后可访问

通过授权后可访问

 

访问时效:

目录类型

文管应用

三方应用

用户数据目录(3D目录)

永久

预置申请3D权限,首次用户授权后,永久访问

用户数据目录(用户自建目录)

永久

通过授权临时访问,应用执行持久化操作,永久访问

用户数据目录(外设存储目录)

永久

通过授权临时访问,应用执行持久化操作,永久访问

其他预置目录(视频/音频/图片等)

永久

通过授权临时访问,应用执行持久化操作,永久访问

应用沙箱目录(el1/Baseel2/Base)

永久

通过授权临时访问,应用执行持久化操作,永久访问

 

文件加密:

应用程序在开发过程中如涉及到对高密文件、敏感数据的加密保护,可使用系统提供的文件加密分区机制应用自定义文件加密实现。其中文件加密分区机制默认生效,应用视角的文件加密保护层级如下图所示:

文件加密分区:

为保证应用在不同场景下的数据安全,系统提供文件加密分区等级机制。开发者可以根据应用的具体需求选择合适的加密等级,以保护用户的数据安全。当前支持的加密分区等级规格,详见: AreaMode

应用程序要实现获取和设置当前加密分区,可以通过读写ContextAreaMode属性来实现:ContextAreaMode属性标识了当前应用程序保存的文件的加密分区级别。应用程序切换文件加密分区级别的示例代码如下。有关加密分区的完整开发指导详见:获取和修改加密分区

// EntryAbility.ets
import { UIAbility, contextConstant, AbilityConstant, Want } from '@kit.AbilityKit';
 
export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
    // 存储普通信息前,切换到EL1设备级加密
    this.context.area = contextConstant.AreaMode.EL1; // 切换area
    // 存储普通信息
 
    // 存储敏感信息前,切换到EL2用户级加密
    this.context.area = contextConstant.AreaMode.EL2; // 切换area
    // 存储敏感信息
 
    // 存储敏感信息前,切换到EL3用户级加密
    this.context.area = contextConstant.AreaMode.EL3; // 切换area
    // 存储敏感信息
 
    // 存储敏感信息前,切换到EL4用户级加密
    this.context.area = contextConstant.AreaMode.EL4; // 切换area
    // 存储敏感信息
 
    // 存储敏感信息前,切换到EL5应用级加密
    this.context.area = contextConstant.AreaMode.EL5; // 切换area
    // 存储敏感信息
  }
}

说明:PC设备上,应用程序的数据默认采用EL2级别的分区加密方式。

注意:如果应用开发者对应用程序敏感文件/高密数据的机密性有额外诉求,期望自主控制文件加密的生命周期,则需要采用自定义的文件加密方式进行加密保护,系统的文件加密分区机制在特定情况可能被关闭。例如,企业具备上默认的文件分区加密机制可在设备激活时被企业管理员关闭。

应用自定义文件加密:

如果系统提供的分区加密机制的无法直接满足应用程序的敏感文件数据保护诉求,可采用自定义的文件加密方案来实现。这种场景下,系统提供了完整的密钥生命周期管理、密码算法库等基础能力供开发者使用。

参考链接:Universal Keystore Kit简介Crypto Architecture Kit简介

说明:应用采用自定义的文件加密方案时,加密文件的存储路径无额外约束,只要应用程序有对应的文件目录访问权限即可。

多设备开发约束:

注意:移动应用会通过主动分发或兼容模式分发平板和PC设备,所以应用开发必须遵从多设备开发约束秘钥文件和隐私文件,必须通过加密,保证在应用数据安全和用户隐私数据的机密性。

以下目录结构以el2目录举例,el1el2el3el4el5的目录结构都遵循如下规则。

文件分类

路径

是否需要加密

手机/Pad文件管理器是否可访问

PC文件管理器是否可访问

应用是否可直接访问

用户授权后是否可访问

应用授权访问访问

Picker授权后访问

应用安装文件

/data/storage/el2/base/haps/entry/bundle

无需

不可访问

永久访问

本应用可直接访问,非本应用需要应用授权才能访问

可访问

可访问

可访问

应用缓存文件

/data/storage/el2/base/haps/entry/cache

无需

不可访问

永久访问

本应用可直接访问,非本应用需要应用授权才能访问

可访问

可访问

可访问

应用高密文件-敏感配置类数据

/data/storage/el2/base/preferences

建议加密

不可访问

永久访问

本应用可直接访问,非本应用需要应用授权才能访问

可访问

可访问

可访问

应用高密文件-敏感业务数据

/data/storage/el2/database

建议加密

不可访问

不可访问

只限本应用访问

不可访问,此目录未开放不涉及授权

不可访问,此目录未开放不涉及授权

不可访问,此目录未开放不涉及授权

应用保存文件-应用沙箱目录

/data/storage/el2/base/XXX

无需

不可访问

 永久访问

本应用可直接访问,非本应用需要应用授权才能访问

可访问

需要应用授权才能访问

可访问

应用保存文件-用户数据目录

/storage/Users/currentUser/XXX

无需

永久访问

 永久访问

需授权拥有文件访问权限才能访问

可访问

需要应用对此文件拥有永久权限后,再应用授权给其他应用才可访问

可访问

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐