围绕工信部开展的《APP侵害用户权益专项整治》337号函、《纵深推进APP侵害用户权益专项整治行动》164号函涉及的相关要求,展开说说,在APP开发过程中技术层面的合规注意事项。
一、违规收集个人信息、违规使用个人信息
根据《个人信息安全规范》、《移动互联网应用程序(App)收集个人信息基本要求》中的定义,个人信息指“以电子或其他方式能够单独或与其他信息结合识别特定自然人身份或反映特定自然人活动情况的各种信息。”除了常规理解的姓名、出生日期、身份证号码、生物特征信息、通讯录、本机号码等个人信息,在APP开发层面还会涉及到各种设备信息,因其不可变更的唯一性或追踪属性,同样也在个人信息范畴内。
1、用户同意《隐私政策》前不应收集任何个人信息,注意APP、引入SDK的初始化时机,主要涉及以下两个场景:
2、对APP、SDK收集的个人信息包括设备信息在《隐私政策》中进行详细的收集声明,对于无使用需求的SDK不应接入(注意,若使用海外SDK则涉及跨境传输问题)。
3、SDK应接入官方最新版本(工信逐步开展对SDK的合规检测,SDK也在逐步合规化):
✅ 比如某 PUSH SDK 旧版本存在漏洞,导致攻击者可以窃取用户隐私信息,应及时更新到最新版
二、超范围收集个人信息
1、非必要功能后台及静默运行时不收集信息,注意不要设计轮询机制(如,一些定位SDK设置固定n分钟收集信息)。
❌ 每隔一分钟请求一次位置更新:
2、收集频率尽可能保证全局只收集1次(最多不超过3次),收集频次不要超过1次/秒。注意:
✅ 将Android ID保存到缓存中,从缓存中读取:
3、默认不调用全量应用列表或不通过shell命令获取全量应用列表。
调用应用列表相关方法包括但不限于:
getInstalledApplications
getInstalledApplicationsAsUser
getInstalledPackages
getInstalledPackagesAsUser
queryIntentActivitiesAsUser(此方法可以输出包名,如果输出了手机已安装应用的全部包名就属于全量)
4、注册流程中不应强制申请权限,因用户拒绝授权而影响注册登录,会被认定为过度索权,即拒绝非必要信息影响正常注册登录。注册必要信息建议参考网信《常见类型移动互联网应用程序必要个人信息范围规定》 http://www.cac.gov.cn/2021-03/22/c_1617990997054277.htm
5、按Home键退出APP后(后台静默状态下),APP或SDK不能有收集行为。
三、APP强制、频繁、过度索取权限
1、调用时机:需遵循场景化授权,即在服务所必要的场景中,用户主动触发功能后申请,在用户主动触发前不应有相关调用行为。
2、权限声明:不需要的权限不应在Android的manifest.xml文件、iOS的info.plist声明,且Android系统中targetSDKVersion应不低于23。
3、敏感权限(通讯录、定位、相册(存储)、相机、麦克风等):Android端申请时用顶栏浮窗等形式同步告知目的,iOS端可直接编辑系统弹窗。
✅ Android端顶栏浮窗代码实现示例
4、APP运行时场景化向用户申请授权,用户拒绝授权后,APP不应退出、关闭、循环弹窗申请权限使用户无法继续使用或者影响正常注册或登录。
❌ 用户拒绝授权APP退出或关闭
❌ 用户拒绝授权重复向用户申请权限,使用户陷入弹窗循环
5、电话权限(READ_PHONE_STATE):属于Android系统权限,APP可通过此权限获取设备 IMSI(国际移动用户识别码)、IMEI(国际移动设备识别码)等设备唯一标识信息,建议不做申请。不可变更的唯一设备标识(IMEI、MAC地址、MEID、IMSI、SN、ICCID),建议采用可变标识(AndroidID、OAID等)代替。
❌ 收集不可变更的唯一设备标识:
6、存储权限(android.permission-group.STORAGE/photos):安卓申请存储权限可用mediastore或SAF框架实现,iOS可用进程外选取器或共享列表替代申请photos权限,不能频繁提示用户更改授权方式。
7、特殊敏感权限(设备管理器、辅助功能、监听通知栏、悬浮窗):需APP内弹窗,用户单独同意授权后才能使用。