祗疼妳一个 发表于 7 天前

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

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

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


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

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


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

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

功能场景



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

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

代码实现

import crypto from '@ohos.security.crypto';
import fs from '@ohos.file.fs';

// 加密敏感数据并存储到沙箱
const privateDir = globalThis.context.filesDir;
const key = new Uint8Array(); // 实际应使用安全密钥

async function saveSecureData(data: string) {
// 加密数据
const cipher = crypto.createAesCipher('AES256|ECB|PKCS7');
const encrypted = await cipher.doFinal({ data: new TextEncoder().encode(data) });

// 写入沙箱
const filePath = `${privateDir}/secure.dat`;
fs.writeSync(fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE), encrypted.data);
}

// 读取并解密
async function loadSecureData() {
const filePath = `${privateDir}/secure.dat`;
const encryptedData = fs.readSync(fs.openSync(filePath, fs.OpenMode.READ_ONLY));
const decipher = crypto.createAesCipher('AES256|ECB|PKCS7');
const decrypted = await decipher.doFinal({ data: encryptedData });
return new TextDecoder().decode(decrypted.data);
}
留意事项



[*]密钥管理:使用鸿蒙密钥库(@ohos.security.huks)存储加密密钥,避免硬编码。
[*]文件路径:克制使用绝对路径跨沙箱访问。
4. 多媒体文件处理(相册/下载管理)

功能场景



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

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

代码实现

import picker from '@ohos.file.picker';
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

async function selectImage() {
// 1. 申请权限
const permissions = ['ohos.permission.READ_MEDIA'];
const result = await abilityAccessCtrl.requestPermissionsFromUser(globalThis.context, permissions);
if (result.authResults !== 0) return;

// 2. 使用文件选择器
const photoPicker = new picker.PhotoViewPicker();
const selected = await photoPicker.select();
const uri = selected.photoUris;

// 3. 拷贝到沙箱临时目录
const tempPath = `${globalThis.context.cacheDir}/temp.jpg`;
const file = await fs.open(uri, fs.OpenMode.READ_ONLY);
const content = await fs.read(file.fd);
await fs.writeFile(tempPath, content);
fs.close(file);
}
最佳实践



[*]用户拒绝权限时,提供引导界面解释权限用途。
[*]大文件处理使用流式读写,避免内存溢出。
5. 跨应用数据分享(如外交应用分享图片)

功能场景



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

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

代码实现

import wantConstant from '@ohos.app.ability.wantConstant';
import fs from '@ohos.file.fs';

async function shareImage() {
// 1. 生成临时文件(沙箱内)
const tempFile = `${globalThis.context.cacheDir}/share_temp.jpg`;
fs.writeFileSync(tempFile, imageData);

// 2. 构建 Intent
const want = {
    action: wantConstant.Action.SEND_DATA,
    uri: `file://${tempFile}`,
    type: 'image/jpeg',
    flags: wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION // 授予临时读取权限
};

// 3. 启动分享
await globalThis.context.startAbility(want);
}
安全要点



[*] 临时文件在分享后立即删除:
fs.unlink(tempFile); // 分享完成后清理

[*] 使用 FLAG_AUTH_READ_URI_PERMISSION 限制第三方应用仅可读本次分享的文件。
6. 系统工具开发(如垃圾清算、Root工具)

功能场景



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

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

代码实现

// 系统应用代码(需特权签名)
import systemAbility from '@ohos.system.systemAbility';

// 获取系统服务
const saManager = systemAbility.createSystemAbilityManager();
const cleanService = saManager.getSystemAbility('clean_service');

// 清理其他应用缓存(需EL2权限)
async function cleanOtherAppCache(packageName: string) {
const otherAppCachePath = `/data/app/${packageName}/cache`;
const files = fs.listDirSync(otherAppCachePath);
files.forEach(file => {
    fs.unlink(`${otherAppCachePath}/${file}`);
});
}
权限声明

// module.json5
{
"module": {
    "requestPermissions": [
      {
      "name": "ohos.permission.CLEAN_BACKGROUND_PROCESSES",
      "reason": "系统清理功能需要访问应用缓存",
      "usedScene": {
          "abilities": ["MainAbility"],
          "when": "inuse"
      }
      }
    ]
}
}
留意事项



[*]仅限预置系统应用使用,克制第三方应用声明高危权限。
[*]需通过华为官方署名验证。
7. 多设备文件同步(分布式场景)

功能场景



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

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

代码实现

import distributedFile from '@ohos.file.distributedFile';
import deviceManager from '@ohos.distributedDeviceManager';

async function syncFileToDevice() {
// 1. 获取可信设备列表
const devices = await deviceManager.getTrustedDeviceListSync();
const targetDevice = devices.deviceId;

// 2. 创建加密传输通道
const session = await distributedFile.createFileSession(targetDevice, {
    encrypt: true,
    algorithm: 'AES-GCM'
});

// 3. 发送文件
const localFile = `${globalThis.context.filesDir}/notes.txt`;
await session.sendFile(localFile, '/remote/notes.txt');

// 4. 接收端监听
session.on('receiveFile', (remoteFile) => {
    fs.copyFileSync(remoteFile.uri, `${globalThis.context.filesDir}/synced_notes.txt`);
});
}
关键优化



[*]断点续传:通过记载文件偏移量实现传输中断恢复。
[*]差分同步:仅传输文件修改部分(如使用 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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: HarmonyOS :应用沙箱在项目开发中的范例使用场景