国产 App 开发的迷思

4 min


16 日凌晨,网友 @瘦出的肋骨已经消失的大侠阿木 发布的一则 视频 显示,只要用户将京东金融的 App 放在后台,他们在其他 App 中进行截图操作获得的截图乃至在这期间使用相机拍摄的照片,无一例外都会被京东金融 App 悄悄缓存至 /data/com.jd.jrapp/cache 目录下。

对于京东金融这样一款来说,这样的行为无疑出格了。好在京东金融方面很快通过客服微博做出了 解释,并发布 长图微博 表明了「绝不会上传用户隐私」的立场。

紧随其后,相关功能紧急下线,京东金融 App「偷照片」这场风波,也转眼得到了平息。

「错误开发」迷思

如果你好奇京东金融 App 究竟是如何偷取照片的,京东金融客服的解释足以解答你的疑惑:

京东金融客服微博截图
京东金融客服微博截图

用通俗一点的话来说,京东金融 App「存图」的初衷是为了方便用户截图与客服沟通反馈,虽然开发者为达成这个功能所调用的接口和第三方库都不具备上传的能力,但采用手机缓存(cache)而不是运行内存(RAM)的实现方式还是导致了这次京东金融 App 后台缓存照片的问题。

用京东金融客服的话来说这次出现问题纯属「错误开发」,但这并非问题的根源。仔细审视当前移动平台上的应用生态(尤其是 Android 平台)就不难发现,京东金融 App「偷照片」这件事其实也为隐私安全保护敲响了警钟。

一方面,真正的错误开发其实是截图反馈功能

通过悬浮窗提供截图反馈入口,可以称得上是国内自作多情派产品经理们的几大「杰作」之一,用更加直白一点的表达方式来说,这种手段就是不折不扣的陋习。

试想一下,打开某某宝截图一年的账单开销想要发个朋友圈,截图完毕后我们却先在这个应用里看到一个小弹窗,问你要不要把刚刚截的图用来进行「问题反馈」:

某应用中的悬浮窗截图反馈
某应用中的悬浮窗截图反馈

作为一款运行在智能手机上的应用,每次截图时都弹出这样的提示无疑是对「智能」二字的亵渎。用户真的需要如此「热心」的问题反馈入口吗?每个人心里都有一杆秤。而通过这种方式收集到的有效反馈信息究竟有多少,就只有那些负责运营维护这些应用的开发者们自己明白了。

近年来热衷于「 客服」「自助反馈」等炫技方式的国内应用开发商,在做这个功能的时候突然间没了那种「不给权限别用我」的自信。而那些毫不在意平台应用设计规范、尤其是 Android 平台应用设计规范的国内应用开发商,眼里又永远只有那几个流氓头子。

最终,类似的设计在某系国产应用中普及之迅速,在某大厂的应用中几乎已经成为了「标配」,这种清奇的功能设计不仅为「错误开发」打开了方便之门,「错误开发」的最终解释权也牢牢掌握在应用开发商手中。

另一方面,无论 iOS 还是 Android,我们能够对应用权限所进行的管理,实在是有些粗放了

这种「粗放」是如何表现的呢?举个例子,我们了一款应用,然后我们需要在注册账号的过程中为自己挑选一张美美的头像,这时这款应用一般就会通过弹窗告诉你「我需要存储空间读取权限」了。

但对应用来说,得到授权不仅是一件「一时爽」的事,因为某个刚需而获取到的权限,也能够成为它们「一直爽」的温床——挑选完头像,为什么我就不能用这个权限再干点别的呢?比如读取你的截图,然后把它悄悄存在其他地方

Android 目前还没有提供「只允许一次」的授权选项,而大众往往又都是健忘的。vivo NEX、OPPO Find X 等升降式摄像头手机上市后就有网友发现,在使用 QQ App 的过程中前置摄像头会不时自动弹出,这些手机也因此被戏称为「流氓应用鉴别器」。

隐私泄露的时候发问「究竟是谁给你偷看的权力」,殊不知当初放虎入羊圈的人正是自己。

在我写这篇文章的时候,京东金融决定给我的联系人拜个晚年

在我写这篇文章的时候,京东金融决定给我的联系人拜个晚年

即便是以安全著称的 iOS,开发者们其实也有许多方法来绕过权限安全机制:在 App 进入后台的 15 分钟内,都可以静默访问相册等敏感信息。此外,当我们在 App 内使用后置摄像头拍照时,其实也无法确认它是否顺便调用了前置摄像头。

图源:微博 @游戏打折情报
图源:微博 @游戏打折情报

微博用户 @游戏打折情报 的文章中,也记录了微信、QQ 及盒马在后台运行时的一些不文明行为。

从管好权限入手

虽然目前原生 AndroidiOS 在权限管理上都还有这样那样的不足,但在下一个「错误开发」被大众发现之前,我们还是可以采取一些必要措施来强化对应用权限的管理。

iOS 中,最简单的方式就是在 iOS 的设置里找到并关闭应用的「后台应用刷新」权限。这样一来,当你返回桌面或其它应用时,当前进程就会被暂时冻结,如果在此期间拍摄了敏感照片,还可以提前删除或保存至其它位置。

15504641827507

在更加开放的 Android 上,很多 App 干脆采取了不给权限不让用的策略(简要概括就是「用户你好,我是你爹」)。为了规避新系统对权限的更严格控制,有些国产 App 甚至故意降低 targetSdkVersion,让你在拒绝权限时心惊胆战。

15504641827525

好在一些国产 ROM 提供了解决方案,如果你正在使用 MIUI 等深度定制的 ROM,可以选择调用权限时「始终询问」

MIUI 可以设置调用权限时询问
MIUI 可以设置调用权限时询问

原生 Android 虽然尚未提供该功能,但也不用着急,App Ops 也能成为你们进行权限管理的利器:既然阻止不了流氓登门拜访,我们不妨带他到一间空房间App Ops 可以为选中的应用生成「假权限」,让它误以为已经获得权限,但只能返回空,这样一来,不给权限不让用的问题也就迎刃而解。

酷安上的 App Ops 截图
 App Ops 截图

使用小程序、PWA、快应用等代替原生 App 也是不错的选择。这些应用在保留大部分核心功能的同时,请求的权限更少,也没有后台驻留等烦恼,适合不想折腾党。

慎用隐私换取便利

我想中国人可以更加开放,对隐私问题没有那么敏感。

应用权限作为一个仍未受到足够重视的话题,显然还需要苹果、、开发者、用户乃至监管部门的协力配合才能得到有效管理。但在应用权限之外,保护好个人隐私安全还需要我们处处小心。

比如时常被我们忽略的第三方应用授权问题:当你选择用 QQ、微信或微博等登录某个应用时,点击确认后它就会获准收集你的个人资料。因此,对于那些只使用一次的 App,我们要慎之又慎。

QQ 授权管理
QQ 授权管理

微信授权管理
微信授权管理

比如慎用那些打着第三方客户端旗号的 App它们往往会请求访问全部个人资料、读写数据等隐私权限。前几天,某国产 Markdown 编辑器就被曝出 静默关注 GitHub 账号并 star 项目 的问题,在圈内引发了不少关注。

印象笔记应用程序授权
印象笔记应用程序授权

再比如尽可能避免个人信息暴露:在网络完全「隐身」虽然是个伪命题,但我们还是需要尽可能地减少泄露个人信息。在大部分社交 App 中,你都可以在账户隐私中找到浏览权限的相关设置,不妨屏蔽些点头之交;发微博或朋友圈时,事先清除照片的 Exif 信息是个好习惯。在 iOS 上,你可以使用由 @RJ 制作的 快捷指令,在 Android 上,Metadata Remover 是个不错的选择。

微信朋友圈/QQ 空间/百度贴吧
微信朋友圈/QQ 空间/百度贴吧

清除 Exif 前后对比
清除 Exif 前后对比

类似的技巧有很多,最重要的一点在于,不要轻易成为某公司 CEO 口中「更愿意用隐私换取便利」的人

少数派曾经发表过一篇广受争议的文章,题为《为什么我用胶布贴住了所有电子产品的摄像头和麦克风》。文中的行为当初看上去似乎有点极端,但很多人不知道的是, 创始人马克·扎克伯格也是这样做的:2016 年,扎克伯格为庆祝 Instagram 的月活用户数突破 5 亿大关,发布了一张他在办公室的照片。细心的网友们在这张照片中发现,他的笔记本摄像头和麦克风都是用胶带遮住的。

注意左边的 MacBook
注意左边的 MacBook

数据主导的时代,个人隐私安全的重要性越发凸显。但遗憾的是,我们很少去思考自己给出的每一个权限、登录的每一个第三方账号和关联的每一个邮箱对自己的个人隐私而言究竟意味着什么。

在下一个京东金融 App 出现「错误开发」之前,我们缺少的其实并不是那卷胶带,而是更加健全的隐私管理意识。

本文由 @Umi 和 @Clyde 联合撰写。


Like it? Share with your friends!

0
DUN

Choose A Format
Story
Formatted Text with Embeds and Visuals
List
The Classic Internet Listicles
Countdown
The Classic Internet Countdowns
Open List
Submit your own item and vote up for the best submission
Ranked List
Upvote or downvote to decide the best list item
Video
Youtube and Vimeo Embeds