首页 > 其他分享 >HarmonyOS:应用隐私保护

HarmonyOS:应用隐私保护

时间:2024-10-31 23:01:18浏览次数:4  
标签:位置 用户 HarmonyOS 隐私 应用 权限 数据

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ 
➤GitHub地址:https://github.com/strengthen
➤原文地址:https://www.cnblogs.com/strengthen/p/18519104
➤如果链接不是为敢技术的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

  

隐私保护概述

随着移动终端及其相关业务(如移动支付、终端云等)的普及,用户隐私保护的重要性愈发突出。隐私保护是尊重个人权利、增加用户信任、确保个人信息安全的重要措施,也是法律法规的要求。个人信息的泄露和滥用可能导致不良后果,如个人诈骗、身份盗用、恶意广告等。

隐私是用户的基本权利,HarmonyOS非常重视用户的隐私。通过隐私保护措施,可以降低个人信息遭到滥用的风险,保护用户的财产和利益。实施良好的隐私保护措施不仅有助于建立良好的用户关系,还有助于保护用户和企业的利益。

为了更好的进行应用隐私保护,开发者首先需要了解以下基本信息:

  1. 什么是隐私数据:根据个人数据的定义,数据分为个人数据、非个人数据两类;根据个人数据的敏感程度,个人数据细分为敏感个人数据、一般个人数据,健康、性生活、个人基因、宗教信仰、生物体征等属于敏感数据。
  2. 隐私保护的原则
  3. 隐私保护的措施:隐私保护的一些建议和方法,以及隐私保护的一些最佳实践

隐私保护的原则

应用开发者在产品设计阶段就需要考虑用户隐私的保护,提高应用的安全性。HarmonyOS应用开发需要遵从隐私保护规则,在应用上架应用市场时,应用市场会根据规则进行校验,如不满足条件则无法上架。我们应遵循一套以控制力、透明度和数据最小化为核心的隐私保护的设计原则:

  1. 数据收集及使用公开透明。

    应用采集个人数据时,应清晰、明确地告知用户,并确保告知用户的个人信息将被如何使用。

  2. 数据收集和使用最小化。

    应用个人数据收集应与数据处理目的相关,且是适当、必要的。开发者应尽可能对个人数据进行匿名或化名,降低对数据主体的风险。仅可收集和处理与特定目的相关且必需的个人数据,不能进行与特定目的不相关的进一步处理。

  3. 数据处理选择和控制。

    对个人数据处理必须要征得用户的同意,用户对其个人数据要有充分的控制权。

  4. 数据安全。

    从技术上保证数据处理活动的安全性,包括个人数据的加密存储、安全传输等安全机制,系统应默认开启或采取安全保护措施。

  5. 本地化处理。

    应用开发的数据优先在本地进行处理,对于本地无法处理的数据上传云服务时要满足最小化的原则,不能默认选择上传云服务。

  6. 未成年人数据保护要求。

    如果应用是针对未成年人设计的,或者应用通过收集的用户年龄数据识别出用户是未成年人,开发者应该结合目标市场国家的相关法律,专门分析未成年人个人数据保护的问题。收集未成年人数据前需要征得监护人的同意。

隐私保护常用方法

下面我们列举了应用隐私保护的一些常用方法。

  1. 使用隐私声明获取用户同意。

    应用采集个人数据时,应清晰、明确地告知用户,并确保告知用户的个人信息将被如何使用。例如在应用启动的时候,可以使用隐私声明弹窗来说明敏感数据的使用和收集,获得用户同意后才能获取用户数据。

  2. 减少应用的位置信息访问权限。

    应用本身不是强位置关联应用(如导航、运动健康等),仅在"部分场景前台"需要使用位置信息(如:定位城市、打卡、分享位置等),推荐使用安全控件LocationButton来获取位置信息,其它情况优先推荐使用模糊定位。

  3. 减少使用存储权限。

    过多的存储访问权限可能会导致用户隐私数据的泄露,应该减少使用存储权限,仅请求访问应用程序所需的数据,可以用Picker来减少对用户存储数据的访问权限。

  4. 动态申请敏感权限。

    申请敏感权限的时候要满足权限最小化的要求,只申请获取必需的信息或资源所需要的权限,减少权限滥用和敏感数据泄露问题。

  5. 数据加密处理。

    从技术上保证数据处理活动的安全性,包括个人数据的加密存储、安全传输等安全机制,应默认开启或采取安全保护措施。

    存储敏感数据应该进行加密处理,具体可以参考《应用数据安全》。

隐私保护最佳实践

下面我们再来介绍一些隐私保护的最佳实践,开发者可以参考这些实践来解决应用的隐私保护问题。

使用隐私声明获取用户同意

当用户安装或使用某个应用程序时,应用程序可能会请求访问用户的敏感权限,例如相机、麦克风、通讯录、位置等。通过弹出隐私声明弹窗,应用程序需要事先向用户说明授权的目的和使用方式,以便用户能够全面了解自己的个人数据将如何被应用程序使用。

隐私声明弹窗的作用有几个方面:

  1. 增强用户控制权:隐私声明弹窗给予用户对于权限的授权选择,用户可以自主决定是否允许应用程序访问其敏感权限。这样可以使用户在安全和隐私方面更具主动性,增强对个人数据的控制。
  2. 保护用户隐私:隐私声明弹窗确保用户在同意授权之前能够清楚地知道应用程序将如何使用其个人数据。这有助于防止应用程序滥用个人数据,保护用户的隐私权益。
  3. 增强透明度:隐私声明弹窗可以为用户提供应用程序的数据使用透明度。通过在弹窗中提供详细的说明和解释,用户可以了解应用程序需要的权限及其使用目的,从而使用户更加放心地做出授权决策。

总而言之,隐私声明弹窗在HarmonyOS中的目的是保护用户隐私权益并增强用户对个人数据的控制。它提供了透明度和选择权,使用户能够全面了解应用程序的权限要求,并自主决定是否授权。

例如在“HMOS世界”中使用了隐私声明的弹窗,具体实现可以参考代码SafePage.ets。应用首次启动后,会弹出该弹窗,当应用获得用户授权同意后,应用才能开始正常使用。

减少应用的位置信息访问权限

位置信息是用户的敏感信息之一,过多的位置信息暴露可能会导致用户被跟踪、盗窃、骚扰等问题。因此,限制应用的位置信息访问权限是保护个人隐私的一个重要方面。

只有当你的应用程序对位置信息的访问是至关重要的,才应该申请位置权限,否则应避免请求该权限,以保护用户的隐私和数据安全;当您需要申请位置权限时,应提供详细的说明和合理的解释,让用户清楚地了解为什么应用需要访问他们的位置信息。

您可以根据场景需要使用以下两种方式,来减少应用的位置信息访问权限:

  • 使用模糊定位获取位置信息。
  • 使用安全控件LocationButton获取位置信息。

使用模糊定位获取位置信息

对于大多数与位置相关的场景,仅请求粗略位置信息的访问权限即可满足要求。例如,天气应用可以基于用户所处的城市或地区提供准确的天气预报,而无需知道用户的具体经纬度,这里我们可以使用模糊位置。HarmonyOS在API9以后,提供模糊位置信息的能力,会为应用提供精确到5公里内的用户位置估算值,这种精度对应用的许多功能而言应已足够。

表1 位置权限申请方式介绍

target API level

申请位置权限

申请结果

位置的精确度

小于9

ohos.permission.LOCATION

成功

获取到精准位置,精准度在米级别。

大于等于9

ohos.permission.LOCATION

失败

无法获取位置。

大于等于9

ohos.permission.APPROXIMATELY_LOCATION

成功

获取到模糊位置,精确度为5公里。

大于等于9

同时申请ohos.permission.APPROXIMATELY_LOCATION和ohos.permission.LOCATION

成功

获取到精准位置,精准度在米级别。

在API9以后,当应用同时申请ohos.permission.APPROXIMATELY_LOCATION和ohos.permission.LOCATION权限时,可以获取到用户精准位置,精准度在米级别;应用仅申请 ohos.permission.APPROXIMATELY_LOCATION:权限弹框仅显示模糊位置权限,用户如授权,则授权APPROXIMATELY_LOCATION模糊权限,应用获取模糊位置。这两种情况下的权限申请弹框如下:

图1 权限申请弹窗

接下来介绍如何实现模糊位置申请:

  1. 首先需要在module.json5配置文件中声明ohos.permission.APPROXIMATELY_LOCATION权限。
    {
      "module": {
        // ...
        "requestPermissions": [
          {
            "name": "ohos.permission.APPROXIMATELY_LOCATION",
            "reason": "$string:location_reason",
            "usedScene": {
              "abilities": [
                "EntryAbility"
              ],
              "when": "inuse"
            }
          },
          // ...
        ],
      }
    }
  2. 在需要使用位置信息的代码块中,动态申请ohos.permission.APPROXIMATELY_LOCATION权限。
    let atManager = abilityAccessCtrl.createAtManager();
    atManager.requestPermissionsFromUser(getContext(this), ['ohos.permission.APPROXIMATELY_LOCATION'])
      .then((data) => {
        Logger.info(`request permissions result: ${JSON.stringify(data)}`);
      })
  3. 获取位置信息,模糊定位和精确定位获取位置信息的接口一样,只是返回结果的精确度不一样。
    let requestInfo: geoLocationManager.LocationRequest = {
      'priority': geoLocationManager.LocationRequestPriority.FIRST_FIX,
      'scenario': geoLocationManager.LocationRequestScenario.UNSET,
      'timeInterval': 1,
      'distanceInterval': 0,
      'maxAccuracy': 0
    };
    
    geoLocationManager.getCurrentLocation(requestInfo).then((result) => {
      Logger.info(`geoLocationManager current location: ${JSON.stringify(result)}`);
      // ...
    }).catch((error: BusinessError) => {
      Logger.error(`geoLocationManager promise, getCurrentLocation: error: ${JSON.stringify(error)}`);
    });
说明

权限的申请具体可以参考:向用户申请授权

使用LocationButton获取位置信息

用户通过点击安全控件的位置控件LocationButton,可以临时获取精准定位权限。敏感行为通过系统控件代理,识别用户主动行为,隐私行为可知可控。比如打卡、发送实时位置等用户主动行为的场景,可以使用LocationButton。例如实现考勤打卡功能,获取位置使用LocationButton获取位置信息的主要代码如下:

@State message: ResourceStr = '';
requestInfo: geoLocationManager.LocationRequest = {
  'priority': geoLocationManager.LocationRequestPriority.FIRST_FIX,
  'scenario': geoLocationManager.LocationRequestScenario.UNSET,
  'timeInterval': 1,
  'distanceInterval': 0,
  'maxAccuracy': 0
};
locationChange = (err: BusinessError, location: geoLocationManager.Location) => {
  if (err) {
    Logger.error(`locationChanger: err: ${JSON.stringify(err)}`);
    return;
  }
  if (location) {
    this.message = $r('app.string.punch_successfully');
  }
};
LocationButton({
  icon: LocationIconStyle.LINES,
  text: LocationDescription.PUNCH_IN,
  buttonType: ButtonType.Circle
})
  .onClick((event, result) => {
    if (result === LocationButtonOnClickResult.SUCCESS) {
      geoLocationManager.getCurrentLocation(this.requestInfo, this.locationChange);
    }
  })

示例图如下:

减少使用存储权限

一般应用获取“存储”权限后,就能读取到手机内部存储上所有的文件,包含所有的照片,这就产生了隐私风险:它就可以在用户毫无感知的情况下,分析用户的文件和图片,将隐私“偷走“。

但是,用户通常不希望授予应用对其所有照片和视频的访问权限,因此,HarmonyOS在API9以后引入了Picker选择器,在保证用户正常的数据访问述求的同时,最小化减少应用的数据泄露。避免全量数据的授权,降低授权的颗粒度,例如用户在发送图片时,只想让应用访问到用户想要发送的。

 

示例代码如下:

import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { BusinessError } from '@kit.BasicServicesKit';

const photoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
photoSelectOptions.maxSelectNumber = 5;
const photoViewPicker = new photoAccessHelper.PhotoViewPicker();
photoViewPicker.select(photoSelectOptions).then((photoSelectResult) => {
  this.imageUri = photoSelectResult.photoUris[0];
  Logger.info(`PhotoViewPicker.select successfully, uris: ${JSON.stringify(photoSelectResult)}`);
}).catch((err: BusinessError) => {
  Logger.error(`PhotoViewPicker.select failed with err: ${JSON.stringify(err)}`);
});

动态申请敏感权限

敏感权限涉及访问个人数据(如:照片、通讯录、日历、本机号码、短信等)和操作敏感能力(如:相机、麦克风等)的权限,所以对于敏感权限的申请需要特别注意。

  1. 合理的权限范围:应用程序应该仅请求其所需的敏感权限范围,并且把权限的范围限制在必要的最小范围内。这样做可以减少权限的滥用和数据泄露的风险。
  2. 最小化权限申请:应用程序只应该请求必要的敏感权限,而不是请求所有敏感权限。如果应用程序不需要某些敏感权限来执行其功能,则不应该请求这些权限。
  3. 明确解释权限用途:应用程序应该清楚、明确地解释它所请求的每个敏感权限的用途。应用程序也应该在隐私政策和应用程序的其他位置提供此信息。

例如商品扫码的功能,我们需要首先在module.json5配置文件中声明相机权限,在reason字段中说明相机权限的使用用途。

{
  "module": {
    // ...
    "requestPermissions": [
      {
        "name": "ohos.permission.CAMERA",
        "reason": "$string:camera_reason",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "inuse"
        }
      }
    ],
  }
}
// string.json
{
  "string": [
    {
      "name": "camera_reason",
      "value": "扫描二维码功能需要使用相机权限来获图片"
    }
  ]
}

然后在扫码组件的点击事件中添加相机权限的动态申请。

let atManager = abilityAccessCtrl.createAtManager();
atManager.requestPermissionsFromUser(getContext(this), ['ohos.permission.CAMERA'])
  .then((data) => {
    let grantStatus: Array<number> = data.authResults;
    if (grantStatus.length > 0 && grantStatus[0] === 0) {
      // The user is authorized to continue to access the target operation
      Logger.info('request permissions granted');
      // ...
    } else {
      // The user rejects the authorization
      Logger.info('request permissions denied');
      // ...
    }
  })

总结与回顾

本文主要介绍了隐私保护的重要性、列举了隐私保护的一些常见做法,并详细介绍了隐私保护的几个最佳实践:

  • 使用隐私声明获取用户同意
  • 减少应用的位置信息访问权限
  • 减少使用存储权限
  • 动态申请敏感权限

请注意,这些只是一些常见的HarmonyOS隐私最佳实践,具体实施策略可能因应用的特定需求和法律法规要求而有所变化。你应该根据你的应用类型和用户定位,结合适用的隐私法规进行更全面和具体的隐私保护措施。

示例代码:应用隐私保护

  

标签:位置,用户,HarmonyOS,隐私,应用,权限,数据
From: https://www.cnblogs.com/strengthen/p/18519104

相关文章

  • HarmonyOS:应用数据安全
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/18519105➤如果链接不是为敢技术的博客园地址,则可能是......
  • 无套路领取《AI应用开发专栏》
    最近有些时间没有更新技术文章了,都在忙着写《AI应用开发入门》专栏,专栏已整理放到了github上,有兴趣的小伙伴可以移步github阅读,地址见文末。1、为什么写这个文档之前陆续写了一些零散的AI相关的技术文章,也有不少粉丝私信交流AI应用开发相关技术,也会聊到一些焦虑的话题,比如:是否会......
  • 现场可编程逻辑门阵列(FPGA)可应用的领域有哪些
    现场可编程逻辑门阵列(FPGA)是一种能够根据需求现场编程的集成电路,能提供灵活的硬件解决方案。FPGA可应用的领域有信号处理、通信系统、工业自动化、医疗设备、军事与航空、金融计算、图像处理和视频分析等。其中,在信号处理方面,FPGA可以执行复杂的并行计算,用于滤波和数据分析。以下......
  • Vite微应用如何接入qiankun
    qiankun是一个很流行的微前端解决方案。之前我也详细的分析过qiankun的原理,感兴趣的可以看看。Vite是当下比较流行的构建工具,它对标的是webpack,并作为Vue3脚手架的默认工具替代了老版vue-cli中的webpack。当然,Vite不仅仅能使用在Vue中,React+Vite也是很好用的。它的特点就是......
  • [NOIP2008 提高组] 笨小猴——map的应用
    题目描述笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设\(\text{maxn}\)是单词中出现次数最多的字母的出现次数,\(\text{minn}\)是单词中出现次数最少的字母的......
  • 多租户系统的应用架构
    大家好,我是汤师爷~我们看下多租户系统的应用架构是如何从一层层构建起来的。1、应用层设计应用层的主要作用是为具体的用户场景提供应用服务,帮助用户在特定场景下完成操作。通过编排领域层的各项能力,实现SaaS产品的核心功能。应用层包含两个关键模块:租户运营平台模块:这个模......
  • 云服务器该如何选择?云服务器和轻量应用服务器的区别?
    云服务器主要有两种,轻量应用服务器(Lighthouse)和云服务器(CVM)。许多新接触云的同学,经常在选购时会遇到困惑,毕竟Lighthouse的价格确实相对会低一些,想买但又担心在使用过程中会遇到坑,毕竟在过往的认识当中,云服务器才是企业使用的主流产品。其实二者在多个方面都存在着差异,这些......
  • 如何在 Ubuntu 18.04 上使用 Gunicorn 和 Nginx 提供 Flask 应用程序
    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。简介在本指南中,您将在Ubuntu18.04上使用Flask微框架构建一个Python应用程序。本文的大部分内容将介绍如何设置Gunicorn应用服务器,以及如何启动应用程序并配置Ngi......
  • 如何在 Ubuntu 18.04 上使用 Gunicorn 和 Nginx 提供 Flask 应用程序
    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。简介在本指南中,您将在Ubuntu18.04上使用Flask微框架构建一个Python应用程序。本文的大部分内容将介绍如何设置Gunicorn应用服务器,以及如何启动应用程序并配置Ngi......
  • 《使用Gin框架构建分布式应用》阅读笔记:p272-p306
    《用Gin框架构建分布式应用》学习第15天,p272-p306总结,总35页。一、技术总结1.TDD(test-drivendevelopment)虽然经常看到TDD这个属于,从本人的工作经历看,实际开发中用得相对较少。2.unitest(单元测试)go语言开发中,使用testify进行单元测试开发。(1)创建测试文件测试文件以xx......