Open Harmony 安全隐私:module.json5 中的 Ability 暴露控制与权限边界
Open Harmony 安全隐私:module.json5 中的 Ability 暴露控制与权限边界 🛡️
前言 🌟
在 OpenHarmony / HarmonyOS 项目中,module.json5 不是一个“随便生成的配置文件”。它决定了模块类型、入口 Ability、页面路径、扩展 Ability、启动图标、启动背景,以及 Ability 是否对外暴露。
当前项目的安全隐私切入点,不是复杂权限系统,而是 Ability 暴露边界。也就是说:哪些能力可以被系统或外部拉起,哪些能力只应该留在应用内部。
本文基于当前项目真实的 module.json5,分析其中和安全隐私相关的配置。
module.json5 的核心结构 📦
当前项目的模块配置大致如下:
{
"module": {
"name": "entry",
"type": "entry",
"mainElement": "EntryAbility",
"deviceTypes": [
"phone"
],
"deliveryWithInstall": true,
"installationFree": false,
"pages": "$profile:main_pages",
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ets",
"exported": true
}
],
"extensionAbilities": [
{
"name": "EntryBackupAbility",
"type": "backup",
"exported": false
}
]
}
}
这份配置可以拆成两部分看:
- 普通 Ability:
EntryAbility - 扩展 Ability:
EntryBackupAbility
它们的 exported 配置不同,背后体现的是不同的能力边界。
EntryAbility 为什么是 exported: true?🚪
项目中 EntryAbility 的配置如下:
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ets",
"description": "$string:EntryAbility_desc",
"icon": "$media:layered_image",
"label": "$string:EntryAbility_label",
"startWindowIcon": "$media:startIcon",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"ohos.want.action.home"
]
}
]
}
这里 exported: true 是合理的,因为它是应用主入口,并且通过 skills 声明了桌面启动能力。
关键配置是:
"entities": [
"entity.system.home"
],
"actions": [
"ohos.want.action.home"
]
这表示该 Ability 可以作为应用首页入口被系统识别。用户点击桌面图标时,就会进入这个 Ability。
从安全角度看,主入口可以暴露,但入口内部仍然应该做好页面跳转、登录状态、数据访问等控制。exported: true 不代表所有业务能力都可以无边界开放。
EntryBackupAbility 为什么是 exported: false?🔐
备份扩展的配置如下:
{
"name": "EntryBackupAbility",
"srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets",
"type": "backup",
"exported": false,
"metadata": [
{
"name": "ohos.extension.backup",
"resource": "$profile:backup_config"
}
]
}
这里 exported: false 很重要。
备份恢复能力可能涉及应用内部数据。如果随意暴露,会扩大攻击面,也会让能力边界变得模糊。当前项目将备份扩展设置为不导出,是比较稳妥的配置。
这也体现了安全隐私设计中的一个基本原则:只暴露必须暴露的能力。
metadata 的作用 🧾
备份扩展还绑定了 metadata:
"metadata": [
{
"name": "ohos.extension.backup",
"resource": "$profile:backup_config"
}
]
它指向:
{
"allowToBackupRestore": true
}
这说明当前应用允许备份恢复。但注意,允许备份恢复和开放扩展入口不是一回事。当前项目一方面允许系统备份恢复流程识别该能力,另一方面通过 exported: false 控制外部暴露边界。
这个组合比较适合写安全隐私文章,因为它不是口号,而是具体配置。
配置文件中的安全检查清单 ✅
基于当前项目,可以总结出一份检查清单:
- 主入口 Ability 是否确实需要
exported: true? - 非主入口 Ability 是否默认关闭外部暴露?
- 扩展 Ability 是否按照能力类型进行精确配置?
- metadata 是否指向正确资源?
skills是否只声明必要的启动动作?- 后续增加权限时,是否做到最小权限原则?
当前项目暂时没有复杂权限申请,所以不要把文章写成“已经实现精细化权限管控”。更真实的说法是:当前项目从 Ability 暴露边界开始,具备安全隐私治理的基础。
与页面代码的关系 🧩
module.json5 负责入口和能力声明,页面文件负责 UI。
当前首页是:
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
build() {
RelativeContainer() {
Text(this.message)
}
.height('100%')
.width('100%')
}
}
这段页面代码本身没有权限访问行为,也没有敏感数据处理。因此安全重点并不在页面,而在 Ability 配置和扩展能力边界。
写技术文章时,把配置层和页面层分清楚,会比泛泛而谈“安全隐私”更有说服力。
总结 🚀
这篇文章对应“四大主题”中的 安全隐私。
当前项目可以真实支撑的内容包括:
EntryAbility作为主入口,设置exported: true。- 通过
skills声明桌面启动入口。 EntryBackupAbility作为备份扩展,设置exported: false。- 通过 metadata 绑定备份配置。
安全隐私不是只有权限弹窗。对 OpenHarmony 应用来说,Ability 是否暴露、扩展能力是否收口、配置文件是否准确,同样是安全设计的重要组成部分。当前项目虽然简单,但这部分基础是扎实的。
参考资料:
- HarmonyOS 官方文档:模块配置文件
- HarmonyOS 官方文档:Ability 与 ExtensionAbility 配置
- 当前项目文件:
module.json5、EntryAbility.ets、EntryBackupAbility.ets

更多推荐



所有评论(0)