查看: 665|回复: 1

HarmonyOS防窥保护:应用内隐私泄露的实时防护方案

[复制链接]
发表于 2026-6-4 11:13:13 | 显示全部楼层 |阅读模式
在移动应用使用过程中,用户经常面临屏幕被窥视的风险,例如分享照片时暴露相册其他内容,或付款时交易记录被偷看。针对这一痛点,HarmonyOS SDK设备安全服务(Device Security Kit)提供了防窥保护能力,通过系统智能判断和传感器监测,自动识别窥视状态并触发防护措施,如拉起系统蒙层遮盖敏感信息。

要使用该能力,设备需满足以下条件:用户需在设备上开启人脸识别并录入人脸信息,同时确认系统设置中是否存在“防窥保护”选项(路径:设置 > 隐私与安全 > 防窥保护)。系统版本要求HarmonyOS 6.0.0 Beta1及以上,DevEco Studio版本6.0.0 Beta1及以上,HarmonyOS SDK版本6.0.0 Beta1 SDK及以上。此外,由于依赖传感器环境判断,人脸距离设备需在合理范围内,且无遮挡、光线充足。

开发流程如下:
1. 导入防窥保护模块及相关公共模块。
  1. import { dlpAntiPeep } from '@kit.DeviceSecurityKit';
  2. import { window } from '@kit.ArkUI';
  3. import { common } from '@kit.AbilityKit';
复制代码

2. 检查当前应用是否已开启防窥保护,若未开启则引导用户设置,然后订阅窥视状态变化通知。
  1. @Entry
  2. @Component
  3. struct Index {
  4.   @State message: string = 'DlpAntiPeep';
  5.   private hasShownMask: boolean = false;
  6.   private onStatusChange = async (status: dlpAntiPeep.DlpAntiPeepStatus): Promise<void> => {
  7.     if (status === dlpAntiPeep.DlpAntiPeepStatus.PASS) {
  8.       console.info('DlpAntiPeepStatus is PASS.');
  9.     } else if (status === dlpAntiPeep.DlpAntiPeepStatus.HIDE) {
  10.       console.info('DlpAntiPeepStatus is HIDE.');
  11.       if (!this.hasShownMask) {
  12.         await this.setMaskLayer();
  13.       }
  14.     }
  15.   }
  16.   async aboutToAppear() {
  17.     try {
  18.       const isOpen = await dlpAntiPeep.isDlpAntiPeepSwitchOn();
  19.       if (isOpen) {
  20.         dlpAntiPeep.on('dlpAntiPeep', this.onStatusChange);
  21.       } else {
  22.         const context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  23.         const result = await dlpAntiPeep.requestAntiPeepOptions(context);
  24.         if (result === dlpAntiPeep.AntiPeepOptionsResult.SUCCESS ||
  25.             result === dlpAntiPeep.AntiPeepOptionsResult.ALREADY_ON) {
  26.           dlpAntiPeep.on('dlpAntiPeep', this.onStatusChange);
  27.         }
  28.       }
  29.     } catch (error) {
  30.       console.error(`Failed to init DlpAntiPeep. Code: ${error.code}, message: ${error.message}`);
  31.     }
  32.   }
  33.   aboutToDisappear() {
  34.     try {
  35.       dlpAntiPeep.off('dlpAntiPeep', this.onStatusChange);
  36.     } catch (error) {
  37.       console.error(`Failed to off DlpAntiPeep. Code: ${error.code}, message: ${error.message}`);
  38.     }
  39.   }
  40.   onPageShow() {
  41.     this.hasShownMask = false;
  42.   }
  43.   private async setMaskLayer(): Promise<void> {
  44.     try {
  45.       const context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  46.       const windowClass = await window.getLastWindow(context);
  47.       const windowId = windowClass.getWindowProperties().id;
  48.       await dlpAntiPeep.setAntiPeepMaskLayer(windowId);
  49.       this.hasShownMask = true;
  50.     } catch (error) {
  51.       console.error(`Failed to set AntiPeep MaskLayer. Code: ${error.code}, message: ${error.message}`);
  52.     }
  53.   }
  54.   build() {
  55.     Column() {
  56.       Text(this.message).fontSize(20).margin(20)
  57.     }
  58.     .width('100%').height('100%')
  59.     .justifyContent(FlexAlign.Center)
  60.   }
  61. }
复制代码

关键逻辑说明:
- 状态回调中,当状态为PASS时表示无人窥视;状态为HIDE时表示有人在窥屏,此时应用应执行隐私保护操作。
- 防护开关未开启时,可以通过调用requestAntiPeepOptions引导用户开启,成功后继续订阅。
- setMaskLayer方法用于拉起系统蒙层,通过获取窗口ID并调用dlpAntiPeep.setAntiPeepMaskLayer实现,同时使用hasShownMask标志避免频繁拉起。
- 页面显示时重置蒙层标志,以便每次进入页面都能再次响应窥视。

防窥保护能力通过毫秒级响应技术,结合传感器与系统蒙层,有效防止非机主偷看屏幕敏感信息。开发者可参考官方开发指导文档(HarmonyOS SDK设备安全服务)获取更多细节。
回复

使用道具 举报

发表于 2026-6-4 11:20:00 | 显示全部楼层

Re: HarmonyOS防窥保护:应用内隐私泄露的实时防护方案

这个方案挺实用的,尤其是针对支付、相册这类容易泄密的应用场景。系统级蒙层的响应速度应该比应用自己实现的遮罩更可靠,而且能避免开发者重复造轮子。不过有个疑问:当检测到窥视状态拉起蒙层后,用户主动回头或正常使用时,状态切回PASS,蒙层是自动消失还是需要开发者手动处理?代码里好像只监听了HIDE时触发蒙层,但没看到恢复的逻辑。另外,光线不足或人脸被部分遮挡时,误触发的概率大不大?毕竟公共场合戴口罩的情况也很常见。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-13 15:20 , Processed in 0.024948 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部