HarmonyOS 应用程序访问控制探究
关于作者
白晓明
宁夏图尔科技有限公司董事长兼 CEO、坚果派联合创始人
华为 HDE、润和软件 HiHope 社区专家、鸿蒙 KOL、仓颉 KOL
华为开发者学堂/51CTO 学堂/CSDN 学堂认证讲师
开放原子开源基金会 2023 开源贡献之星
公众号:开源开发者新视界(openwatcher)
一、引言
随着信息技术的飞速发展,移动应用程序已经成为人们生活和工作中不可或缺的一部分。然而,随之而来的是对应用程序安全性的更高要求,尤其在用户隐私保护方面。工信部一直高度重视用户隐私保护,并依据《个人信息保护法》、《电信条例》、《规范互联网信息服务市场秩序若干规定》、《电信和互联网用户个人信息保护规定》等相关法律法规规章,对涉及用户隐私获取做出明确的通知,防止未经用户授权访问用户隐私信息以及用户隐私信息的滥用。
HarmonyOS 的应用程序访问控制机制在这种背景下显得尤为重要,不仅可以保护用户的个人信息,还可以提高应用程序的安全性和可靠性,增强用户对应用程序的信任。HarmonyOS 应用程序中,默认情况下,应用只能访问有限的系统资源,需要访问额外的系统数据(包括用户个人数据)和功能,应用必须以明确的方式对外提供接口来共享其数据或功能。通过访问控制机制,避免数据或功能被不当或恶意使用。
我将继续深入探究 HarmonyOS 应用程序访问控制的原理、方法和实践,为开发者和用户提供有益的参考。通过对 HarmonyOS 访问控制机制的探究,我们可以更好地理解其工作原理和优势,为开发更加安全可靠的应用程序提供指导。同时,我们也可以为用户提供更好的使用体验,让用户更加放心地使用 HarmonyOS 应用程序。
二、HarmonyOS 应用程序访问控制的重要性
1)保护用户数据安全
在移动应用程序中,用户的数据往往包含敏感信息,如个人身份信息、财务信息等。如果应用程序没有有效的访问控制机制,这些数据可能会被恶意应用程序窃取或滥用。HarmonyOS 的访问控制机制可以限制应用程序对用户数据的访问权限,从而保护用户数据的安全。HarmonyOS 根据不同的授权方式,权限类型分为以下两种:
system_grant
(系统授权):在该类型的权限许可下,应用被允许访问的数据不会涉及到用户或设备的敏感信息,应用被允许执行的操作对系统或者其他应用产生的影响可控。申请该权限的应用系统会在用户安装应用时,自动把相应权限授予应用。user_grant
(用户授权):在该类型的权限许可下,应用被允许访问的数据将会涉及到用户或设备的敏感权限,应用被允许执行的操作可能对系统或其他应用产生严重的影响。该类型权限不仅需要在安装包中申请权限,还需要在应用动态运行时,通过发送弹窗的方式请求用户授权。在用户手动允许授权后,应用才会真正获取相应的权限,从而成功访问操作目标对象。
2)防止应用程序滥用权限
一些应用程序可能会过度申请权限,从而获取用户的隐私信息或进行不必要的操作。HarmonyOS 的访问控制机制可以对应用程序的权限进行严格管理,防止应用程序滥用权限。HarmonyOS 提出了受限开放的权限,比如允许读写用户公共目录的音频文件ohos.permission.READ_AUDIO/WRITE_AUDIO
,允许应用使用全局悬浮窗的能力ohos.permission.SYSTEM_FLOAT_WINDOW
等权限,若特殊场景需要使用这些受限开放权限,则需要提供相关申请材料到应用市场申请相应权限证书通过后,才可以正常使用。
3)提高系统安全性
HarmonyOS 的访问控制机制不仅可以保护用户数据的安全,还可以提高系统的安全性。通过限制应用程序的访问权限,可以防止恶意应用程序对系统进行攻击或破坏。
三、HarmonyOS 应用程序访问控制的原理
1)应用权限
HarmonyOS 采用了权限管理机制,对应用程序的访问权限进行严格控制。应用程序在安装时需要声明所需的权限,用户在安装应用程序时可以查看这些权限并决定是否授予。在运行时,系统会根据应用程序的权限声明和用户的授权情况,对应用程序的访问请求进行权限检查。
为了防止应用过度索取和滥用权限,HarmonyOS 中基于 APL(Ability Privilege Level,元能力权限等级)等级,配置了不同的权限开放范围。应用 APL 等级分为以下三个等级,等级依次提高。
根据权限对于不同等级应用有不同的开放范围,权限 APL 等级对应分为以下三个等级,等级依次提高。
2)沙箱机制
HarmonyOS 采用了沙箱机制,系统中运行的应用程序均部署在受限保护的沙箱中,通过沙箱的安全隔离机制,可以限制应用程序的不当行为(如应用间非法访问数据、篡改设备等)。沙箱环境中每个程序都拥有唯一的 ID(TokenID),系统基于此 ID 识别与限制应用的访问行为,从而提高系统的安全性。同时,沙箱机制还可以防止应用程序之间的互相干扰,提高系统的稳定性。
3)系统控件
HarmonyOS 提供了系统 Picker、安全控件等临时授权的方式替代权限申请,在特定的场景中,应用无需向用户申请权限也可以临时访问受限资源,实现精准化权限管控,更好地保护用户隐私。
系统 Picker:由系统独立进程实现,在应用拉起 Picker,并由用户操作 Picker 后,应用可以获取 Picker 返回的资源或结果。举例说明,当应用需要读取用户图片时,可通过使用照片 Picker,在用户选择所需要的图片资源后,直接返回该图片资源,而不需要授予应用读取图片文件的权限。
安全控件:由系统提供 UI 控件,应用在界面内集成对应控件,用户点击后,应用将获得临时授权,从而执行相关操作。举例说明,当应用需要分享当前位置时,可使用位置控件,用户点击后,将会在本次前台期间获得精准定位的授权,可以调用位置服务获取精准定位。当发生灭屏、应用切后台、应用退出等任一情况时,临时授权结束。
四、 HarmonyOS 应用程序访问控制开发指南
1)选择申请权限的方式
最小权限原则:即在应用开发初期,开发者应仔细分析应用的功能和业务逻辑,确定所需的权限,避免过度申请权限,以免引起用户的疑虑和不信任。
动态申请权限:即在应用运行时,根据实际业务场景动态申请权限,提高用户体验,减少不必要的权限请求干扰。
在 HarmonyOS 中每个权限的权限等级、授权方式不同,申请权限的方式也不同,开发者在申请权限前,需要先根据应用权限列表和应用申请权限的方式(参见下表)查看能否申请目标权限。
以位置服务(Location Kit)为例,应用需要检查是否已经获取用户授权访问设备位置信息,若未获取授权,可以向用户申请需要的位置权限。
2)声明权限
根据实际的业务需要确定需要的权限后,需要在module.json5
配置文件的requestPermissions
标签中声明位置服务(Location Kit)所需的权限。
3)向用户申请授权封装
大多数应用程序都会根据业务需要向用户申请授权,可利用抽象理念将向用户申请授权代码封装成可复用的模块或组件。通过定义清晰的接口和规范,可以提高代码的可维护性和可扩展性,同时降低不同应用场景的适配难度。
在工程entry
模块src/main/ets
目录下创建common
文件夹,用于存放工程需要的基础公共代码,比如常量类AppConstants
、权限控制工具类PermissionUtil
等。
在common > utils
目录创建 ArkTS 文件PermissionUtil
,并使用export
导出该类。
用户每次执行需要目标权限的操作时,应用都必须调用checkAccessToken()
方法检查自身是否已经具有该权限,该方法返回已授权PERMISSION_GRANTED
或未授权PERMISSION_DENIED
。在PermissionUtil
中添加静态方法checkPermissionGrant
用于检查当前应用程序是否已经被授予权限。
在校验应用是否被授予权限时,若未授权,需要调用requestPermissionsFromUser()
方法动态向用户申请权限(指应用程序运行时向用户请求授权的过程)。在PermissionUtil
中添加静态方法reqPermissionFromUser
方法动态向用户申请授权。
4)在 UI 中向用户申请授权
5)效果预览
五、结论
HarmonyOS 应用程序访问控制机制是保障用户数据安全和系统安全的重要手段。通过权限管理、沙箱机制、系统控件等多种方法,HarmonyOS 可以有效地限制应用程序对系统资源的访问权限,防止应用程序滥用权限和恶意攻击。
版权声明: 本文为 InfoQ 作者【白晓明】的原创文章。
原文链接:【http://xie.infoq.cn/article/67f540652c1661c8630ab3678】。文章转载请联系作者。
评论