【最新鸿蒙应用开发】——沙箱机制是什么?作用?场景?

沙箱机制

1. 什么是沙箱机制?

1.1. 概念

在操作系统当中,沙箱机制(Sandboxing)是一种安全机制,用于限制程序代码的访问权限,防止恶意软件对系统造成破坏。在沙箱环境中,程序只能访问特定的资源,如文件、注册表、网络等,而不能访问其他系统资源。这样,即使恶意软件试图执行有害操作,也会因为权限限制而无法成功。

1.2. 沙箱机制的主要用途包括:

  1. 防止恶意软件破坏系统:通过限制程序的访问权限,沙箱机制可以防止恶意软件修改系统文件、注册表等关键资源,保护系统的安全。

  2. 保护用户隐私:沙箱机制可以限制程序访问用户的个人信息,如文档、图片等,防止恶意软件窃取用户隐私。

  3. 防止系统崩溃:沙箱机制可以限制程序的资源使用,如内存、CPU等,防止恶意软件占用过多资源导致系统崩溃。

  4. 提供测试环境:沙箱环境允许开发人员在不影响实际系统的情况下测试程序的功能和性能。

总之,沙箱机制是一种有效的安全机制,可以保护系统资源用户隐私系统稳定性防止恶意软件对系统造成破坏。

2. 鸿蒙沙箱机制

2.1. 原理

鸿蒙操作系统(OpenHarmony)中的沙箱机制是一个重要的安全特性,它为每个应用提供了一个独立、安全的运行环境。这种机制通过将应用的文件(包括安装文件、资源文件和缓存文件)隔离在一个独立的沙箱目录中来实现,这样每个应用都能够在自己的沙箱中运行,互不干扰,从而提高了系统的安全性稳定性

被隔离的沙箱环境如何访问系统资源?

HarmonyOS中,每个应用都有其独立的沙箱目录,用于存储应用的文件。沙箱路径是指应用内部的文件路径,而物理路径则是指文件在存储设备上的实际路径。通过映射关系沙箱路径物理路径可以相互转换,使得应用可以访问其所需的文件资源。

沙箱有什么具体使用场景?
  1. 进行文件读写时

    HarmonyOS的文件API分为同步异步两种操作方式。在进行耗时的文件操作时(如文件拷贝),应避免在主进程中进行同步操作,因为这可能会阻塞主进程。相反,应选择使用异步操作或新建一个worker来执行文件操作。例如,可以使用fs.openSync方法来异步打开一个文件,并指定打开模式为读写模式,如果不存在则创建。

  2. 使用第三方模块时

    对于app调用三方模块时出现的问题,如果app源码没有使用绝对路径去访问文件,可以通知三方模块,让其访问文件路径通过context接口进行访问而非使用绝对路径的方式。这样可以确保三方模块也能够遵守沙箱文件的访问规则,从而避免出现路径访问异常。

2.2. 场景演示(系统文件读写)

由于沙箱安全机制的规则,开发者是无法直接访问系统资源的目录的,可以将原来访问/data目录的绝对路径访问方式调整为使用context接口进行访问,也就是访问沙箱目录下的缓存目录(沙箱目录和系统物理路径是可以通过映射关系相互转换的),通过fs.openSync方法来异步打开一个文件,并指定打开模式为读写模式,如果不存在则创建。再使用fs.copyFileSync将文件的内存地址写入沙箱路径的缓存目录中。

    //openSync获取系统中该文件对应的内存地址const file = fs.openSync(photoImagePath, fs.OpenMode.READ_ONLY)
​//copyFileSync将内存地址写入沙箱目录中let Path = getContext().cacheDir + '/' + fileNamefs.copyFileSync(file.fd, Path)

效果:

参考代码

import { picker } from '@kit.CoreFileKit'
import fs from '@ohos.file.fs';
import emitter from '@ohos.events.emitter';
import { LoadingDialog1 } from '../components/LoadingDialog';
import { ILoginUserModel } from '../../models/AccountModel';
import { Logger } from '../utils/Logger';
import { request } from '@kit.BasicServicesKit';
import { HdHttp } from '../utils/request';
import { promptAction } from '@kit.ArkUI';
​
@Component//用于图片上传的组件
export struct PictureUpload {@PropshowPicture: string// 打开上传进度自定义弹窗dialog: CustomDialogController = new CustomDialogController({builder: LoadingDialog1({ message: '上传进度:0' }),customStyle: true,alignment: DialogAlignment.Center})
​// 用户选择系统中的一个图片返回async pickerAvatar() {// 1. 引导用户选择一张系统相册的照片//  1.1. 限定让用户只能从系统相册中选择1张图片const options = new picker.PhotoSelectOptions()options.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE //只能选择图片类型的资源options.maxSelectNumber = 1 //只能选择一张系统相册中的照片
​//  1.2. 利用PhotoViewPicker对象实例中的select自动获取到用户选择的那张图片的地址const pickerView = new picker.PhotoViewPicker()let urls = await pickerView.select(options)
​if (urls.photoUris.length <= 0) {return}let photoImagePath = urls.photoUris[0]
​// 2. 将需要上传的图片写入缓存地址//  2.1 定义一个不重复的文件名和文件类型const fileTypeIndex = photoImagePath.lastIndexOf('.')const fileType = photoImagePath.slice(fileTypeIndex + 1)const fileName = Date.now() + '.' + fileType//  2.2. openSync获取系统中该文件对应的内存地址const file = fs.openSync(photoImagePath, fs.OpenMode.READ_ONLY)
​//  2.3. copyFileSync将内存地址写入沙箱目录中let Path = getContext().cacheDir + '/' + fileNamefs.copyFileSync(file.fd, Path)
​//  2.4. 沙箱目录中缓存文件的地址const cacheFullPath = `internal://cache/${fileName}`
​// 3. 上传this.dialog.open()
​let user = AppStorage.get('user') as ILoginUserModellet token = user?.token
​let upload = await request.uploadFile(getContext(), {method: 'POST',url: 'https://api-harmony-teach.itheima.net/hm/userInfo/avatar',header: {"Content-Type": "multipart/form-data","Authorization": `Bearer ${token}`},files: [{filename: fileName,type: fileType,name: 'file',uri: cacheFullPath}],data: []})
​//  监听上传的进度//   uploadedSize:当前上传了多少size//   totalSize:表示当前要上传文件的总大小upload.on('progress', (uploadedSize, totalSize) => {// 上传百分比计算:let pnum = (uploadedSize / totalSize * 100).toFixed(0)Logger.info('上传进度:', pnum)// 使用emitter来进行发送事件emitter.emit({ eventId: 0 }, { data: { process: '已上传:' + pnum } })// Logger.info('上传大小:' + uploadedSize, '总大小:' + totleSize)if (uploadedSize === totalSize) {this.dialog.close()// 重新更新头像数据this.update()}})
​}
​// 重新获取最新的图片更新到AppStorage中async update() {let res = await HdHttp.get<object>('userInfo')// 由于我只需要服务器返回数据中的avatar字段的值,所以这里直接采取对象中括号取值法获取结果即可// 好处:省略掉接口的定义this.showPicture = res.data['avatar']promptAction.showToast({ message: '头像修改成功' })}
​build() {Column() {Image(this.showPicture || $rawfile('avatar.png')).width((40)).width((40)).borderRadius((40)).border({ width: 0.5, color: '#e4e4e4' }).onClick(async () => {//  选择系统相册图片进行上传this.pickerAvatar()})}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态库加载【Linux】

从此往后&#xff0c;建立映射&#xff0c;我们执行的任何代码&#xff0c;都是在我们的进程地址空间中进行执行 例如&#xff1a;将动态库映射到共享区&#xff0c;进程在CPU调度时&#xff0c;是在进程的进程地址空间处运行 程序在编译好之后&#xff0c;在加载到内存之前&a…

欧美北美南美国外媒体投稿和东南亚中东亚洲媒体海外新闻发稿软文推广营销策略有哪些?

在当今全球化的浪潮中&#xff0c;中国品牌正积极拓展海外市场&#xff0c;寻求更广阔的发展空间。面对国际竞争&#xff0c;有效的海外媒体发稿营销策略对于品牌国际化至关重要。以下是一些关键点和建议&#xff0c;以帮助品牌在海外市场取得成功。 深入了解目标市场&#xf…

Linux 内核之 mmap 内存映射触发的缺页异常 Page Fault

文章目录 前言一、简介1. MMU 内存管理2. 缺页中断3. 页表4. 小节 二、mmap 提前分配物理内存1. mm_populate 函数2. __mm_populate 函数3. populate_vma_page_range 函数4. __get_user_pages 函数5. find_extend_vma 函数6. find_vma 函数7. follow_page_mask 函数8. follow_p…

Ubuntu22.04 下 pybind11 搭建,示例

Pybind11 是一个轻量级的库&#xff0c;用于在 C 中创建 Python 绑定。Ubuntu22下安装pybind11步骤如下&#xff1a; 1. 安装 pybind11 1.1 pip 命令安装 pip3 install pybind11 1.2 源代码安装 安装依赖库&#xff1a; sudo pip install -i https://pypi.tuna.tsinghua.e…

一、Electron 环境初步搭建

新建一个文件夹&#xff0c;然后进行 npm init -y 进行初始化&#xff0c;然后我们在进行 npm i electron --save-dev , 此时我们按照官网的教程进行一个初步的搭建&#xff0c; 1.在 package.json 文件进行修改 {"name": "electron-ui","version…

【全开源】多功能投票小程序系统源码(ThinkPHP+FastAdmin+Uniapp)

&#x1f680; 多功能投票小程序&#xff0c;让决策变得更简单&#xff01; 基于ThinkPHPFastAdminUniapp开发的多功能系统&#xff0c;支持图文投票、自定义选手报名内容、自定义主题色、礼物功能(高级授权)、弹幕功能(高级授权)、会员发布、支持数据库私有化部署&#xff0c…

Java项目如何外发告警日志到企业微信

前言 最近领导交代了一个需求,就是有些许客户不单单满足平台告警日志外发到邮箱、短信的形式,还要以消息聊天的形式外发给企业微信。 具体操作 1、注册企业微信。 2、登录企业微信,找到应用管理,创建应用。 3、创建完之后需要记录以下图片中两个值的信息。 4、然后记录下…

vue实现大语言模型返回的数据将代码高亮显示的实现

0. 引言 最近在学习ai大模型相关的东西&#xff0c;就想着自己做一个类似于chatGPT的网站&#xff0c;做到最后的时候代码块始终是不能高亮显示&#xff0c;以前一直搞Java没太了解过前端vue相关的东西&#xff0c;经过自己查资料&#xff0c;自己慢慢也是研究出来了。 这个项目…

RFID模块板子JY-LD6900通用自由口协议通信说明

RFID模块板子JY-LD6900是健永科技基于RFID无线射频识别技术推出的一款低频读卡模块&#xff0c;体积小巧&#xff0c;性能优越&#xff0c;读卡时间小于30ms&#xff0c;识别速度达2m/s&#xff0c;配套62mm直径圆形天线&#xff0c;读卡距离可达20cm以上。支持双频134.2kHz、1…

分享:618学习狂欢节活动来啦——大数据培训班

618狂欢学习节 限时优惠大放送 活动时间&#xff1a;6月1日—6月18日

商淘云电商分账系统如何为企业降低连锁财务成本

当今激烈的市场竞争中&#xff0c;连锁品牌企业面临着多样化的挑战&#xff0c;其中财务管理尤为关键。商淘云连锁收银系统作为一款专为连锁品牌量身定制的解决方案&#xff0c;不仅可以帮助企业实现总部入账管控财务、银行结算规范财务的目标&#xff0c;还能通过分账系统优化…

什么是SIEM

SIEM 解决方案是一种企业级应用程序&#xff0c;可集中和自动化与网络安全相关的操作&#xff0c;该工具通过收集、分析和关联从组织 IT 基础设施中的各种实体聚合的网络事件来帮助应对网络威胁。 与帮助监控和评估组织物理空间中的危险的监视控制台相比&#xff0c;SIEM解决方…

【漏扫工具】Afrog V3.0.6一款漏洞扫描神器

简介 [Afrog]是一款高性能的漏洞扫描器&#xff0c;快速稳定。它支持用户自定义的 PoC&#xff0c;并内置了多种类型&#xff0c;例如 CVE、CNVD、默认密码、信息泄露、指纹识别、未经授权的访问、任意文件读取和命令执行。借助 afrog&#xff0c;网络安全专业人员可以快速验证…

从一道题看利用sqlite打jdbc达到RCE

前言 从今年国赛的一道java题遇到了sqlite数据库去打jdbc达到RCE的姿势&#xff0c;故笔者写篇文章记下 复现 反编译源代码可以看见这三个数据库 这里提供了mysql sqlite psql 但mysql和psql都不行 这里我们用sqlite去打 jdbc就可以执行load_extension() CVE-2023-32697&#…

重磅就业报告前美股涨势消减,标普暂别纪录高位,英伟达盘中闪崩近6%,欧央行降息预期“退烧”,欧元跳涨

标普纳指创盘中历史新高后转跌&#xff0c;道指三连涨至近两周新高&#xff1b;芯片股指和台积电美股跌落纪录高位&#xff0c;英伟达三日收创历史新高后回落&#xff1b;游戏驿站盘中一度暴拉50%。中概股指回落&#xff0c;财报后蔚来收跌6.8%。欧央行会后&#xff0c;欧元盘中…

美颜SDK与直播美颜插件:开发者指南与优化技巧

本篇文章&#xff0c;小编将详细探讨如何利用美颜SDK和直播美颜插件进行开发&#xff0c;以及在实际应用中优化这些工具的技巧。 一、美颜SDK简介 美颜SDK这些功能通过复杂的图像处理算法实现&#xff0c;SDK的存在大大简化了开发者的工作&#xff0c;使他们无需从零开始编写…

项目3:从0开始的RPC框架

一. 基本概念 区别于传统的增删改查型的业务项目&#xff0c;本项目侧重于开发框架&#xff0c;并且涉及架构方面的技术知识点。 1. 什么是RPC&#xff1f; 远程过程调用&#xff08;Remote Procedure Call&#xff09;&#xff0c;是一种计算机通信协议&#xff0c;它允许程…

GAT1399协议分析(10)--视频定义及解析

一、官方定义 二、字段解析 VideoID 类型BasicObjectID 解析参考GAT1399协议分析(8)--ImageInfo字段详解-CSDN博客 InfoKind 采集类型

小程序自定义marker弹出框教程

需求背景 微信小程序开发&#xff0c;需要使用腾讯地图显示自定义marker&#xff0c;并且点击marker后弹出自定义的customCallout&#xff0c;并且customCallout的内容为用户点击marker的时候再从后台接口获取数据。 百度了一圈后发现居然没有一篇文章可以一次性完成&#xf…

SSM旅游论坛(前后分离源码+论文)

该旅游论坛是基于Spring、SpringMVC、Mybatis框架开发出来的 用户信息管理 此页面提供给管理员的功能有&#xff1a;用户信息的查询管理&#xff0c;可以删除用户信息、修改用户信息、新增用户信息&#xff0c; 还进行了对用户名称的模糊查询的条件 景点信息管理 论坛类型管理…