codecamp

鸿蒙OS 权限概述

基本概念

  • 应用沙盒

系统利用内核保护机制来识别和隔离应用资源,可将不同的应用隔离开,保护应用自身和系统免受恶意应用的攻击。默认情况下,应用间不能彼此交互,而且对系统的访问会受到限制。例如,如果应用 A(一个单独的应用)尝试在没有权限的情况下读取应用 B 的数据或者调用系统的能力拨打电话,操作系统会阻止此类行为,因为应用 A 没有被授予相应的权限。

  • 应用权限

由于系统通过沙盒机制管理各个应用,在默认规则下,应用只能访问有限的系统资源。但应用为了扩展功能的需要,需要访问自身沙盒之外的系统或其他应用的数据(包括用户个人数据)或能力;系统或应用也必须以明确的方式对外提供接口来共享其数据或能力。为了保证这些数据或能力不会被不当或恶意使用,就需要有一种访问控制机制来保护,这就是应用权限。

应用权限是程序访问操作某种对象的许可。权限在应用层面要求明确定义且经用户授权,以便系统化地规范各类应用程序的行为准则与权限许可。

  • 权限保护的对象

权限保护的对象可以分为数据和能力。数据包含了个人数据(如照片、通讯录、日历、位置等)、设备数据(如设备标识、相机、麦克风等)、应用数据;能力包括了设备能力(如打电话、发短信、联网等)、应用能力(如弹出悬浮框、创建快捷方式等)等。

  • 权限开放范围

权限开放范围指一个权限能被哪些应用申请。按可信程度从高到低的顺序,不同权限开放范围对应的应用可分为:系统服务、系统应用、系统预置特权应用、同签名应用、系统预置普通应用、持有权限证书的后装应用、其他普通应用,开放范围依次扩大。

  • 敏感权限

涉及访问个人数据(如:照片、通讯录、日历、本机号码、短信等)和操作敏感能力(如:相机、麦克风、拨打电话、发送短信等)的权限。

  • 应用核心功能

一个应用可能提供了多种功能,其中应用为满足用户的关键需求而提供的功能,称为应用的核心功能。这是一个相对宽泛的概念,本规范用来辅助描述用户权限授权的预期。用户选择安装一个应用,通常是被应用的核心功能所吸引。比如导航类应用,定位导航就是这种应用的核心功能;比如媒体类应用,播放以及媒体资源管理就是核心功能,这些功能所需要的权限,用户在安装时内心已经倾向于授予(否则就不会去安装)。与核心功能相对应的是辅助功能,这些功能所需要的权限,需要向用户清晰说明目的、场景等信息,由用户授权。既不属于核心功能,也不是支撑核心功能的辅助功能,就是多余功能。不少应用存在并非为用户服务的功能,这些功能所需要的权限通常被用户禁止。

  • 最小必要权限

保障应用某一服务类型正常运行所需要的应用权限的最小集,一旦缺少将导致该类型服务无法实现或无法正常运行的应用权限。

运作机制

系统所有应用均在应用沙盒内运行。默认情况下,应用只能访问有限的系统资源。这些限制是通过 DAC(Discretionary Access Control)、MAC(Mandatory Access Control)以及本文描述的应用权限机制等多种不同的形式实现的。因应用需要实现其某些功能而必须访问系统或其他应用的数据或操作某些器件,此时就需要系统或其他应用能提供接口,考虑到安全,就需要对这些接口采用一种限制措施,这就是称为“应用权限”的安全机制。

接口的提供涉及到其权限的命名和分组、对外开放的范围、被授予的应用、以及用户的参与和体验。应用权限管理模块的目的就是负责管理由接口提供方(访问客体)、接口使用方(访问主体)、系统(包括云侧和端侧)和用户等共同参与的整个流程,保证受限接口是在约定好的规则下被正常使用,避免接口被滥用而导致用户、应用和设备受损。

约束与限制

  • 同一应用自定义权限个数不能超过 1024 个。
  • 同一应用申请权限个数不能超过 1024 个。
  • 为避免与系统权限名冲突,应用自定义权限名不能以 ohos 开头,且权限名长度不能超过 256 字符。
  • 自定义权限授予方式不能为 user_grant。
  • 自定义权限开放范围不能为 restricted。含义见[表2]。
鸿蒙OS 安全
鸿蒙OS 权限开发指导
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

鸿蒙OS 开发

鸿蒙OS 术语

鸿蒙OS Java API参考

鸿蒙OS ohos.aafwk.ability

鸿蒙OS ohos.aafwk.abilityjet.activedata

鸿蒙OS ohos.aafwk.content

鸿蒙OS java.lang

鸿蒙OS java.Util

鸿蒙OS java.Util class

鸿蒙OS ohos.data.dataability

鸿蒙OS ohos.data.dataability class

鸿蒙OS ohos.agp.components

鸿蒙OS ohos.agp.components interface

鸿蒙OS ohos.agp.components class

鸿蒙OS ohos.global.configuration

鸿蒙OS java.io

鸿蒙OS ohos.data.resultset

鸿蒙OS ohos.data.resultset interface

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }