安卓应用安全指南 5.5.2 处理隐私数据 规则书

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 5.5.2 处理隐私数据 规则书 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA 4.0处理隐私策略时,遵循以下规则:5.5.2.1 将用户数据的传输限制为最低需求(必需)将使用数据传输到外部服务器或其他目标时,将传输限制在提供服务的最低需求。

5.5.2 处理隐私数据 规则书

原书:Android Application Secure Design/Secure Coding Guidebook

译者:飞龙

协议:CC BY-NC-SA 4.0

处理隐私策略时,遵循以下规则:

5.5.2.1 将用户数据的传输限制为最低需求(必需)

将使用数据传输到外部服务器或其他目标时,将传输限制在提供服务的最低需求。 特别是,你应该设计为,应用只能访问这些用户数据,用户可以根据应用描述来想象它们的使用目的。

例如,用户可以想象,它是个警报应用,但不能访问位置数据。另一方面,如果警报应用可以根据用户的位置发出警报,并将其功能写入应用的描述中,则应用可以访问位置数据。

在只需要在应用中访问信息的情况下,避免将信息传输到外部,并采取其他措施来减少无意中泄漏用户数据的可能性。

5.5.2.2 在首次加载(或应用更新)时,获得广泛同意来传输需要特别细致处理或用户可能难以更改的用户数据(必需)

如果应用向外部服务器,传输用户可能难以更改的任何用户数据,或需要特别细致处理的任何用户数据,则应用必须在用户开始使用之前,获得用户的预先同意(选择性加入) - 通知用户哪些类型的信息将被发送到服务器,以及是否会涉及任何第三方厂商。 更具体地说,首次启动时,应用应显示其应用隐私政策并确认该用户已阅读并同意。 此外,无论何时应用更新,通过将新类型的用户数据传输到外部服务器,它都必须再次确认用户已经阅读并同意这些更改。 如果用户不同意,应用应该终止或以其他方式采取措施,来确保所有需要传输数据的功能都被禁用。

这些步骤可以确保,用户了解他们在使用应用时如何处理数据,为用户提供安全感并增强他们对应用的信任。

MainActivity.java

protected void onStart() {
    super.onStart();

    // (some portions omitted)

    if (privacyPolicyAgreed <= VERSION_TO_SHOW_COMPREHENSIVE_AGREEMENT_ANEW) {
        // *** POINT *** On first launch (or application update), obtain broad consent to transmit user data that will be handled by the application.
        // When the application is updated, it is only necessary to renew the user’s grant of broad consent if the updated application will handle new types of user data.
        ConfirmFragment dialog = ConfirmFragment.newInstance(
            R.string.privacyPolicy, R.string.agreePrivacyPolicy,
            DIALOG_TYPE_COMPREHENSIVE_AGREEMENT);
        dialog.setDialogListener(this);
        FragmentManager fragmentManager = getSupportFragmentManager();
        dialog.show(fragmentManager, "dialog");
    }

5.5.2.3 在传输需要特殊处理的用户数据之前获得特定的同意(必需)

向外部服务器传输任何需要特别细致处理的用户数据时,除了需要获得一般同意之外,应用必须获得用户对每种这类用户数据(或涉及传输用户数据的每个功能)的预先同意(选择性加入)。 如果用户不同意,则应用不得将相应的数据发送到外部服务器。 这确保用户可以更全面地了解应用的功能(及其提供的服务)和用户对其授予一般同意的,用户数据的传输之间的关系;同时,应用提厂商可以基于更精确的决策,预计获得用户的同意。

MainActivity.java

public void onSendToServer(View view) {
    // *** POINT *** Obtain specific consent before transmitting user data that requires particularly delicate handling.
    ConfirmFragment dialog = ConfirmFragment.newInstance(R.string.sendLocation, R.string.cofi
    rmSendLocation, DIALOG_TYPE_PRE_CONFIRMATION);
    dialog.setDialogListener(this);
    FragmentManager fragmentManager = getSupportFragmentManager();
    dialog.show(fragmentManager, "dialog");
}

5.5.2.4 向用户提供查看应用隐私策略的方法(必需)

一般来说,Android 应用市场将提供应用隐私策略的链接,供用户在选择安装相应的应用之前进行复查。 除了支持此功能之外,应用还需要提供一些方法,用户在设备上安装应用后,可以查看应用隐私策略。 特别重要的是提供一些方法,用户可以轻易复查应用隐私政策。在同意的情况下,将用户数据传输到外部服务器来协助用户作出适当决定。

MainActivity.java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_show_pp:
            // *** POINT *** Provide methods by which the user can review the application privacy policy.
            Intent intent = new Intent();
            intent.setClass(this, WebViewAssetsActivity.class);
            startActivity(intent);
            return true;

5.5.2.5 在素材文件夹中放置应用隐私策略的摘要版本(推荐)

将应用隐私策略的摘要版本放在素材文件夹中,来确保用户可以按需对其进行复查,这是一个不错的主意。 确保素材文件夹中存在应用隐私策略,不仅可以让用户随时轻松访问它,还可以避免用户看到由恶意第三方准备的应用隐私策略的伪造或损坏版本的风险。

5.5.2.6 提供可以删除传输的数据的方法,以及可以通过用户操作停止数据传输的方法(推荐)

提供根据用户需要,删除传输到外部服务器的用户数据的方法,是一个好主意。与之相似,在应用本身已经在设备内存储用户数据(或其副本)的情况下,向用户提供用于删除该数据的方法是一个好主意。而且,提供可以根据用户要求停止用户数据发送的方法,是一个好主意。

这一规则(建议)由欧盟推行的“被遗忘权”编纂而成;更普遍的是,在未来,各种提案将要求进一步加强用户保护其数据的权利,这看起来很明显。为此在这些指导方针中,我们建议提供删除用户数据的方法,除非有一些具体原因不能这样做。并且,停止数据传输,主要由浏览器的对应观点“不追踪(否定追踪)”定义。

MainActivity.java


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        (some portions omitted)

        case R.id.action_del_id:
            // *** POINT *** Provide methods by which transmitted data can be deleted by user
            operations.
            new SendDataAsyncTack().execute(DEL_ID_URI, UserId);
            return true;
    }

5.5.2.7 从 UUID 和 Cookie 中分离设备特定的 ID(推荐)

不应通过与用户数据绑定的方式传输 IMEI 和其他设备特定 ID。 事实上,如果一个设备特定的 ID 和一段用户数据被捆绑在一起,并发布或泄露给公众 - 即使只有一次 - 随后也不可能改变该设备特定的 ID,因此对于把 ID 和用户数据绑定的服务器来说,这是不可能的(或至少 很难)。 在这种情况下,最好使用 UUID 或 cookie(即每次基于随机数重新生成的变量 ID),与用户数据一起传输时代替设备特定的 ID。 这允许实现上面讨论的“被遗忘的权利”的概念。

MainActivity.java

@Override
protected String doInBackground(String... params) {
    // *** POINT *** Use UUIDs or cookies to keep track of user data
    // In this sample we use an ID generated on the server side
    SharedPreferences sp = getSharedPreferences(PRIVACY_POLICY_PREF_NAME, MODE_PRIVATE);
    UserId = sp.getString(ID_KEY, null);
    if (UserId == null) {
        // No token in SharedPreferences; fetch ID from server
        try {
            UserId = NetworkUtil.getCookie(GET_ID_URI, "", "id");
        } catch (IOException e) {
            // Catch exceptions such as certification errors
            extMessage = e.toString();
        }
        // Store the fetched ID in SharedPreferences
        sp.edit().putString(ID_KEY, UserId).commit();
    }
    return UserId;
}

5.5.2.8 如果你只在设备内使用用户数据,请通知用户,数据不会传输到外部(推荐)

即使在用户数据只在用户设备中临时访问的情况下,向用户传达这一事实也是一个好主意,来确保用户充分和透明地理解了应用行为。 更具体来说,应该告知用户,应用访问的用户数据只在设备内用于特定的目的,不会被存储或发送。 将此内容传达给用户的可能方法,包括在应用市场上的应用描述中指定它。 仅在设备中临时使用的信息,不需要在应用隐私策略中讨论。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
2月前
|
开发工具 Android开发 开发者
Android平台如何不推RTMP|不发布RTSP流|不实时录像|不回传GB28181数据时实时快照?
本文介绍了一种在Android平台上实现实时截图快照的方法,尤其适用于无需依赖系统接口的情况,如在RTMP推送、RTSP服务或GB28181设备接入等场景下进行截图。通过底层模块(libSmartPublisher.so)实现了截图功能,封装了`SnapShotImpl.java`类来管理截图流程。此外,提供了关键代码片段展示初始化SDK实例、执行截图、以及在Activity销毁时释放资源的过程。此方案还考虑到了快照数据的灵活处理需求,符合GB/T28181-2022的技术规范。对于寻求更灵活快照机制的开发者来说,这是一个值得参考的设计思路。
|
2月前
|
JSON Java Android开发
Android 开发者必备秘籍:轻松攻克 JSON 格式数据解析难题,让你的应用更出色!
【8月更文挑战第18天】在Android开发中,解析JSON数据至关重要。JSON以其简洁和易读成为首选的数据交换格式。开发者可通过多种途径解析JSON,如使用内置的`JSONObject`和`JSONArray`类直接操作数据,或借助Google提供的Gson库将JSON自动映射为Java对象。无论哪种方法,正确解析JSON都是实现高效应用的关键,能帮助开发者处理网络请求返回的数据,并将其展示给用户,从而提升应用的功能性和用户体验。
50 1
|
2月前
|
缓存 API Android开发
Android经典实战之Kotlin Flow中的3个数据相关的操作符:debounce、buffer和conflate
本文介绍了Kotlin中`Flow`的`debounce`、`buffer`及`conflate`三个操作符。`debounce`过滤快速连续数据,仅保留指定时间内的最后一个;`buffer`引入缓存减轻背压;`conflate`仅保留最新数据。通过示例展示了如何在搜索输入和数据流处理中应用这些操作符以提高程序效率和用户体验。
40 6
|
2月前
|
编解码 网络协议 前端开发
如何实现Android平台GB28181设备接入模块按需打开摄像头并回传数据
后台采集摄像头,如果想再进一步扩展,可以把android平台gb28181的camera2 demo,都移植过来,实现功能更强大的国标设备侧,这里主要是展示,收到国标平台侧的回传请求后,才打开摄像头,才开始编码打包,最大限度的减少资源的占用
|
2月前
|
编解码 网络协议 Android开发
Android平台GB28181设备接入模块实现后台service按需回传摄像头数据到国标平台侧
我们在做Android平台GB28181设备对接模块的时候,遇到这样的技术需求,开发者希望能以后台服务的形式运行程序,国标平台侧没有视频回传请求的时候,仅保持信令链接,有发起视频回传请求或语音广播时,打开摄像头,并实时回传音视频数据或接收处理国标平台侧发过来的语音广播数据。
|
2月前
|
算法 数据处理 开发工具
Android平台RTSP|RTMP播放器如何回调YUV或RGB数据
在开发Android平台上的RTSP或RTMP播放器时,开发者不仅追求低延迟播放,还希望获取解码后的视频数据(如YUV或RGB格式),以便进行视觉算法分析。使用大牛直播SDK中的SmartPlayer,可在确保播放流畅的同时,通过设置外部渲染器(`SmartPlayerSetExternalRender`)来高效地回调原始视频数据。例如,对于RGBA数据,需实现`NTExternalRender`接口,并重写相关方法以处理数据和尺寸变化。同样地,对于I420(YUV)数据,也需要相应地实现接口以满足需求。这种方式使得开发者能在不影响常规播放功能的情况下,进行定制化的视频处理任务。
|
3月前
|
存储 安全 数据安全/隐私保护
🔎Android安全攻防实战!守护你的应用数据安全,让用户放心使用!🛡️
【7月更文挑战第28天】在移动应用盛行的时代,确保Android应用安全性至关重要。本文以问答形式探讨了主要安全威胁(如逆向工程、数据窃取)及其对策。建议使用代码混淆、签名验证、数据加密等技术来增强应用保护。此外,还推荐了加密API、HTTPS通信、代码审计等措施来进一步加强安全性。综上所述,全面的安全策略对于构建安全可靠的应用环境必不可少。#Android #应用安全 #代码混淆 #数据加密
55 3
|
2月前
|
存储 缓存 Java
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
34 0
|
3月前
|
安全 数据安全/隐私保护 Android开发
探索Android 12中的隐私保护特性
随着数字化时代的到来,个人隐私保护成为全球关注的焦点。Android作为广泛使用的操作系统之一,其在最新发布的Android 12版本中引入了多项隐私保护功能。本文将深入探讨这些新特性如何增强用户数据的安全性,以及它们对应用开发者和普通用户的具体影响。
58 3
|
3月前
|
安全 Android开发 数据安全/隐私保护
探索Android 12的新特性:用户体验与隐私保护的革新
【7月更文挑战第7天】随着技术的不断进步,用户对手机操作系统的期望也日益增长。本文将深入分析Android 12带来的创新特性,特别是其如何通过重新设计的用户界面和增强的隐私功能提升整体体验,并探讨这些变化如何影响开发者和用户的互动模式。
下一篇
无影云桌面