HarmonyOS :应用沙箱在项目开发中的范例使用场景

打印 上一主题 下一主题

主题 1771|帖子 1771|积分 5315

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在鸿蒙(HarmonyOS)的微内核架构和安全沙箱机制中,Core File KitEL1/EL2 权限层级 是保障文件操纵安全的焦点技能。以下是它们在项目开发中的范例使用场景、技能实现及代码示例:
  1. Core File Kit 的焦点作用

Core File Kit 是鸿蒙提供的底层文件操纵框架,支持安全、高效的沙箱内/外文件读写,主要功能包罗:


  • 沙箱内私有文件管理:无需权限,直接操纵应用私有目次。
  • 跨沙箱/公共文件访问:通过权限和 URI 授权机制访问外部数据。
  • 分布式文件同步:跨设备文件传输的加密与权限管控。

2. EL1 与 EL2 的权限层级

在鸿蒙的安全架构中,EL(Execution Level) 代表不同的执行权限层级:


  • EL1(用户态):普通应用运行层级,受沙箱严格限制,默认无系统级权限
  • EL2(内核态/系统服务层):系统服务和高权限组件运行层级,可访问底层资源。
文件操纵权限对比

权限能力EL1(应用层)EL2(系统层)沙箱内文件读写✅ 直接访问✅ 直接访问公共目次读写⚠️ 需动态申请权限✅ 默认允许跨应用文件访问⚠️ 需 URI 授权✅ 直接访问(受计谋限制)系统关键文件操纵❌ 克制✅ 允许(如 /system 目次) 3. 用户隐私数据存储

功能场景



  • 需求:存储用户敏感数据(如聊天记载、本地暗码、生物辨认信息)。
  • 焦点技能

    • 沙箱私有目次:确保数据隔离。
    • 加密存储:防止设备破解后数据泄露。
    • EL1权限控制:仅应用自身可访问。

代码实现

  1. import crypto from '@ohos.security.crypto';
  2. import fs from '@ohos.file.fs';
  3. // 加密敏感数据并存储到沙箱
  4. const privateDir = globalThis.context.filesDir;
  5. const key = new Uint8Array([0x01, 0x02, 0x03]); // 实际应使用安全密钥
  6. async function saveSecureData(data: string) {
  7.   // 加密数据
  8.   const cipher = crypto.createAesCipher('AES256|ECB|PKCS7');
  9.   const encrypted = await cipher.doFinal({ data: new TextEncoder().encode(data) });
  10.   // 写入沙箱
  11.   const filePath = `${privateDir}/secure.dat`;
  12.   fs.writeSync(fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE), encrypted.data);
  13. }
  14. // 读取并解密
  15. async function loadSecureData() {
  16.   const filePath = `${privateDir}/secure.dat`;
  17.   const encryptedData = fs.readSync(fs.openSync(filePath, fs.OpenMode.READ_ONLY));
  18.   const decipher = crypto.createAesCipher('AES256|ECB|PKCS7');
  19.   const decrypted = await decipher.doFinal({ data: encryptedData });
  20.   return new TextDecoder().decode(decrypted.data);
  21. }
复制代码
留意事项



  • 密钥管理:使用鸿蒙密钥库(@ohos.security.huks)存储加密密钥,避免硬编码。
  • 文件路径:克制使用绝对路径跨沙箱访问。

4. 多媒体文件处理(相册/下载管理)

功能场景



  • 需求开发相册应用或文件管理器,需读写公共目次(如 DCIM、Download)。
  • 焦点技能

    • 动态权限申请:READ_MEDIA/WRITE_MEDIA 权限。
    • URI安全访问:通过 @ohos.file.picker 安全获取文件句柄。

代码实现

  1. import picker from '@ohos.file.picker';
  2. import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
  3. async function selectImage() {
  4.   // 1. 申请权限
  5.   const permissions = ['ohos.permission.READ_MEDIA'];
  6.   const result = await abilityAccessCtrl.requestPermissionsFromUser(globalThis.context, permissions);
  7.   if (result.authResults[0] !== 0) return;
  8.   // 2. 使用文件选择器
  9.   const photoPicker = new picker.PhotoViewPicker();
  10.   const selected = await photoPicker.select();
  11.   const uri = selected.photoUris[0];
  12.   // 3. 拷贝到沙箱临时目录
  13.   const tempPath = `${globalThis.context.cacheDir}/temp.jpg`;
  14.   const file = await fs.open(uri, fs.OpenMode.READ_ONLY);
  15.   const content = await fs.read(file.fd);
  16.   await fs.writeFile(tempPath, content);
  17.   fs.close(file);
  18. }
复制代码
最佳实践



  • 用户拒绝权限时,提供引导界面解释权限用途。
  • 大文件处理使用流式读写,避免内存溢出。

5. 跨应用数据分享(如外交应用分享图片)

功能场景



  • 需求:用户将应用内天生的图片分享到微信、邮件品级三方应用。
  • 焦点技能

    • URI权限授予:通过 Intent 转达临时访问令牌。
    • 沙箱外临时文件:使用 temp 目次避免污染私有空间。

代码实现

  1. import wantConstant from '@ohos.app.ability.wantConstant';
  2. import fs from '@ohos.file.fs';
  3. async function shareImage() {
  4.   // 1. 生成临时文件(沙箱内)
  5.   const tempFile = `${globalThis.context.cacheDir}/share_temp.jpg`;
  6.   fs.writeFileSync(tempFile, imageData);
  7.   // 2. 构建 Intent
  8.   const want = {
  9.     action: wantConstant.Action.SEND_DATA,
  10.     uri: `file://${tempFile}`,
  11.     type: 'image/jpeg',
  12.     flags: wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION // 授予临时读取权限
  13.   };
  14.   // 3. 启动分享
  15.   await globalThis.context.startAbility(want);
  16. }
复制代码
安全要点



  • 临时文件在分享后立即删除:
    1. fs.unlink(tempFile); // 分享完成后清理
    复制代码
  • 使用 FLAG_AUTH_READ_URI_PERMISSION 限制第三方应用仅可读本次分享的文件。

6. 系统工具开发(如垃圾清算、Root工具)

功能场景



  • 需求开发系统级工具,需要扫描/清算其他应用缓存或系统日志。
  • 焦点技能

    • EL2特权权限:声明系统级权限如 ohos.permission.CLEAN_BACKGROUND_PROCESSES。
    • 跨沙箱访问:通过系统API获取特权文件访问权。

代码实现

  1. // 系统应用代码(需特权签名)
  2. import systemAbility from '@ohos.system.systemAbility';
  3. // 获取系统服务
  4. const saManager = systemAbility.createSystemAbilityManager();
  5. const cleanService = saManager.getSystemAbility('clean_service');
  6. // 清理其他应用缓存(需EL2权限)
  7. async function cleanOtherAppCache(packageName: string) {
  8.   const otherAppCachePath = `/data/app/${packageName}/cache`;
  9.   const files = fs.listDirSync(otherAppCachePath);
  10.   files.forEach(file => {
  11.     fs.unlink(`${otherAppCachePath}/${file}`);
  12.   });
  13. }
复制代码
权限声明

  1. // module.json5
  2. {
  3.   "module": {
  4.     "requestPermissions": [
  5.       {
  6.         "name": "ohos.permission.CLEAN_BACKGROUND_PROCESSES",
  7.         "reason": "系统清理功能需要访问应用缓存",
  8.         "usedScene": {
  9.           "abilities": ["MainAbility"],
  10.           "when": "inuse"
  11.         }
  12.       }
  13.     ]
  14.   }
  15. }
复制代码
留意事项



  • 仅限预置系统应用使用,克制第三方应用声明高危权限。
  • 需通过华为官方署名验证。

7. 多设备文件同步(分布式场景)

功能场景



  • 需求:实现手机、平板、智慧屏间的笔记同步。
  • 焦点技能

    • 分布式文件系统:@ohos.file.distributedFile。
    • 设备认证:确保传输目的为可信设备。
    • 端到端加密:防止中心人攻击。

代码实现

  1. import distributedFile from '@ohos.file.distributedFile';
  2. import deviceManager from '@ohos.distributedDeviceManager';
  3. async function syncFileToDevice() {
  4.   // 1. 获取可信设备列表
  5.   const devices = await deviceManager.getTrustedDeviceListSync();
  6.   const targetDevice = devices[0].deviceId;
  7.   // 2. 创建加密传输通道
  8.   const session = await distributedFile.createFileSession(targetDevice, {
  9.     encrypt: true,
  10.     algorithm: 'AES-GCM'
  11.   });
  12.   // 3. 发送文件
  13.   const localFile = `${globalThis.context.filesDir}/notes.txt`;
  14.   await session.sendFile(localFile, '/remote/notes.txt');
  15.   // 4. 接收端监听
  16.   session.on('receiveFile', (remoteFile) => {
  17.     fs.copyFileSync(remoteFile.uri, `${globalThis.context.filesDir}/synced_notes.txt`);
  18.   });
  19. }
复制代码
关键优化



  • 断点续传:通过记载文件偏移量实现传输中断恢复。
  • 差分同步:仅传输文件修改部分(如使用 rsync 算法)。

总结:功能与技能的映射表

功能场景焦点技能关键API/组件隐私数据存储沙箱隔离 + 加密存储@ohos.security.crypto, context.filesDir相册文件管理动态权限 + 公共目次访问@ohos.file.picker, abilityAccessCtrl跨应用分享URI授权 + 临时文件Intent, wantConstant.Flags系统工具开发EL2特权权限 + 跨沙箱访问系统级 SystemAbility多设备同步分布式文件 + 设备认证 + 加密传输@ohos.file.distributedFile
开发发起


  • 权限最小化:仅申请必要的权限,并在 module.json5 中详细说明原因。
  • 数据生命周期管理:及时清算临时文件(如 cacheDir 定期主动清算)。
  • 安全审计:对 EL2 层代码进行严格的安全测试,防止提权毛病。
  • 用户体验:在文件操纵(如大文件拷贝)时添加进度条和取消功能。
通过合理运用鸿蒙的沙箱和文件技能,可以在保障安全性的同时,实现丰富的功能需求。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

祗疼妳一个

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表