「Allow Once」和 API 审计能否成为 iOS 地理位置隐私的救命稻草?

「Allow Once」和 API 审计能否成为 iOS 地理位置隐私的救命稻草?

iOS 13 中新添加了一个名为 「Allow Once」 的地理位置权限. 起初我对这个权限非常感兴趣, 因为这能够限制部分应用滥读位置的问题, 然而事实的结果是这个功能做的非常粗糙, 可能他偶尔能够起下作用, 但是大多数时候只会削减使用 App 的体验.

具体批评这个功能之前, 先谈谈 iOS 的地理位置的权限逻辑. 传统上分为三种:

  • 禁止
  • 下一次询问
  • 使用 App 时
  • 一直允许

大多数 App 一般只会申请 「使用 App 时」, 部分导航 App 如果你给了这个权限, 离开应用的时候, 就会在顶部出现 「XXX 正在使用地理位置」, 这就是系统对于这种例外的 workaround: 虽然你不在这个 App 里面, 但是你可能还用着他导航/分享位置, 于是我们告诉你, 这个 App 还在使用你的位置.

而「一直允许」就是一个比较严格的权限, 如果 App 要申请这个权限, 通常会面临更细致的审核. 通常只有地图/LBS游戏才会询问这个权限. 最典型的例子就是 Fog of World. 而现如今 Ingress Prime 已经不再要求这个权限, 当然这就会带来些问题. 所以在 iOS 13 中, 对于这些带有可以在后台一直读取地理位置能力的 App 进行了审计, 也就是偶尔会弹出的「XXX App 在最近一段时间读取了位置 xx 次」, 配上一张地图, 然后你可以调整到较低的权限或继续允许他一直读位置.

那么我们再看 「Allow Once」, 这个权限的意思是, 当设置为下一次询问, 应用请求位置的时候, 你可以在这个时候给出单次的位置, 而短时间内后续的请求都会回报为刚才的位置. 但是当你退出再进入应用, 仍然会弹出这个位置; 此时一个问题就是, 如果你并不想给这个读你的位置, 在那个地方点击拒绝就是等于「永远拒绝」而非「此时拒绝」, 这就带来麻烦, 当你真的想要用位置的时候就需要进入设置然后开启地理位置权限. 这就和很多人的设想相违背: 我想给的时候给一次, 不想给的时候拒绝一次.

在现实中, 很多国产 App 上来的第一个操作就是问你要地理位置权限, 即便可能你的操作和地理位置并没有太多关联. 理想的情况是, 只有到你执行查看附近的外卖提供商/分享你现在的位置时, 才会请求位置权限. iOS 设计了一个让应用程序在请求权限的时候能够提供相关理由(string)的一个接口参数, 然而很多国产 App 还是自己设计了一个解释位置功能目的和开启方法的弹窗. 以及这次也显示出了部分 App 的流氓面目: 明明是 Ask Next Time, 却认为完全没有权限, 然后启动 App 设置要求开启权限; 当然这个情况在 Android 上更为糟糕, 很多时候 App 无法读到位置的时候通常会自动退出.

最后回到审计. 现有的审计基本只针对 「Always Allow」 的那些应用的读取位置行为. 这个功能设计喜忧参半, 说实话他弹出的窗口有点恼人, 其中一个原因是通常申请了这个权限的 App 往往通过了审查, 也获得了我的允许(比如 LBS 游戏), 很显然我不会关掉他. 真正讨厌的是那些 While Using 却「拿着鸡毛当令箭」, 在使用中无时无刻都在读取位置的那些 App. 所以就需要对 App 读取位置的频率进行审计, 并且可以对 App 读取位置精度进行分类; 另外就是扩展相关接口, 从询问「你在哪里」变成「你是否在某个已登记位置」或是仅允许部分 App 在部分区域得到准确位置. 以此让 App 避免接触用户敏感数据的前提下仍然能够使用相关基于地理位置的功能.

发布于 2019-11-10

文章被以下专栏收录