马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在鸿蒙(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([0x01, 0x02, 0x03]); // 实际应使用安全密钥
- 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] !== 0) return;
- // 2. 使用文件选择器
- const photoPicker = new picker.PhotoViewPicker();
- const selected = await photoPicker.select();
- const uri = selected.photoUris[0];
- // 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[0].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企服之家,中国第一个企服评测及商务社交产业平台。 |