iOS 14 剪贴簿隐私问题|揭露 APP 读取原因与安全风险解析
解析 iOS 14 剪贴簿被大量 APP 读取的背后原因,揭示隐私恐慌与便利性的两难,并提供开发者优化剪贴簿读取的技术策略,助你提升使用者信任与体验。
Click here to view the English version of this article.
點擊這裡查看本文章正體中文版本。
基于 SEO 考量,本文标题与描述经 AI 调整,原始版本请参考内文。
iOS 14 剪贴簿窃资恐慌,隐私与便利的两难
为何那么多 iOS APP 会读取你的剪贴簿?
Photo by Clint Patterson
⚠️ 2022/07/22 Update: iOS 16 Upcoming Changes
iOS ≥ 16 开始非使用者主动操作贴上动作,App 主动读取剪贴簿的行为会跳出询问视窗,使用者需要按允许,App 才能读取到剪贴簿资讯。
UIPasteBoard’s privacy change in iOS 16
议题
剪贴簿被 APP 读取时的顶部提示讯息
iOS 14 开始会提示使用者 APP 读取了您的剪贴簿,尤其中国大陆的 APP 本来就恶名昭彰,再加上媒体不断的放大报导,造成不小的隐私恐慌;但其实不只中国 APP, 美国 、台湾、日本…世界各地很多大大小小的 APP 全都现形,那到底是为了什么那么多 APP 都需要读取剪贴簿呢?
Google Search
安全
剪贴簿可能包含个人隐私甚至密码,如使用 1Password、LastPass…等密码管理器复制密码;APP 有能力读取到就有能力回传回伺服器记录,一切看开发者的良心,真要查的话可透过使用 中间人嗅探 ,监听 APP 回传回伺服器的资料,是否包含剪贴簿资讯。
渊源
剪贴簿 API ,从 iOS 3 2009 年开始就有,只是从 iOS 14 开始会多跳提示告知使用者而已,中间已过十余年,如果是恶意的 APP 也收集够足够的资料了。
为何
为何那么多 APP 不论国内外都会在 打开时 读取剪贴簿呢?
这边要先定义一下,我说的情况是 「APP 打开时」 ,而不是 APP 使用中读取剪贴簿;APP 使用中读取的情况比较偏是 APP 内的功能应用,像是 Goolge Map 自动贴上刚复制的地址、但也不排除有的 APP 会不断偷取剪贴簿资讯。
「一把菜刀可以切菜也可以杀人,取决于用的人拿来做什么」
APP 打开时会读取剪贴簿主要原因是要做「 iOS Deferred Deep Link 」 加强使用者体验 ,如上流程所示;当一个产品同时提供网页及APP时,我们更希望使用者能安装 APP(因黏著度更高),所以当使用者浏览网页版网站时会导引下载 APP,但我们希望下载完开启 APP 会自动打开网页离开时的页面。
EX: 当我在 safari 逛 PxHome 手机网页版 -> 看到喜欢的产品想要购买 -> PxHome 希望流量导 APP -> 下载 APP -> 打开 APP -> 展现刚网页看到的商品
如果不这样做,使用者只能 1. 回到网页上再点一次 2. 在 APP 内重新搜寻一次产品;不管 1 还是 2 都会增加使用者购买上的困难及犹豫时间,可能就不买了!
另一方面以营运来说,知道从哪个来源成功安装的统计,对行销、广告预算投放都有很大的帮助。
为何一定要用剪贴簿,有无其他替代方式?
这是场 猫鼠游戏 ,因为 iOS 苹果本身不希望开发者有办法反向追踪使用者来源,iOS 9 之前的做法是将资讯存入网页 Cookie,APP 安装完后再读取 Cookie 出来用,iOS 10 之后这条路被苹果封住无法使用;退无可退大家才使用最终技 — 「用剪贴簿传资讯」来达成,iOS 14 再次递出新招,提示使用者让开发者尴尬。
另一条路是使用 Branch.io 的方式,记录使用者轮廓(IP、手机资讯),然后用搓合的方式读取资讯,原理上可行,但需要投入大量人力(牵涉到后端、资料库、APP)去研究实作,且可能会误判或碰撞。
*对面的 Android Google 原本就支援此功能,不用像 iOS 这样绕来绕去。
受影响的 APP
可能很多 APP 开发者都不知道自己也出现剪贴簿隐私问题,因为 Google 的 Firebase Dynamic Links 服务也是使用同样的原理实现:
1
2
3
4
5
// Reason for this string to ensure that only FDL links, copied to clipboard by AppPreview Page
// JavaScript code, are recognized and used in copy-unique-match process. If user copied FDL to
// clipboard by himself, that link must not be used in copy-unique-match process.
// This constant must be kept in sync with constant in the server version at
// durabledeeplink/click/ios/click_page.js
所以任何有使用到 Google Firebase Dynamic Links 服务的 APP 都可能中枪剪贴簿隐私问题!
个人观点
资安问题是有的,但就是「 信任」 ,信任开发者是拿来做正确的事;如果开发者要做恶,有更多的地方可以做恶,例如:偷取信用卡资讯、偷记录真实密码…等等,都要比这个有效的多。
提示的用途就是让使用者能注意到剪贴簿读取的时间点,如果不合理就要小心!
读者提问
Q:「TikTok 回应存取剪贴簿是为了侦测滥发垃圾讯息的行为」这种说法是正确的吗?
A:我个人认为只是找个理由搪塞舆论,抖音的意思应该是「为了防止使用者四处复制贴上广告讯息」;但实际可以在讯息输入完成时或是送出讯息时再做阻挡过滤,没必要时时监听使用者剪贴簿的资讯!难道剪贴簿有广告或「敏感」讯息也要管?我又没贴上发表出去。
开发者能做的事
若手边没有备用机可升级 iOS 14 测试,可先从 Apple 下载 XCode 12 用模拟器测看看。
一切都还太新,如果你是串 Firebase 可以先参考 Firebase-iOS-SDK/Issue #5893 更新到最新的 SDK。
如果是自己实作 DeepLink 可以参考 Firebase-iOS-SDK #PR 5905 的修改:
Swift:
1
2
3
4
5
6
7
if #available(iOS 10.0, *) {
if (UIPasteboard.general.hasURLs) {
//UIPasteboard.general.string
}
} else {
//UIPasteboard.general.string
}
Objective-C:
1
2
3
4
5
6
7
8
9
if (@available(iOS 10.0, *)) {
if ([[UIPasteboard generalPasteboard] hasURLs]) {
//[UIPasteboard generalPasteboard].string;
}
} else {
//[UIPasteboard generalPasteboard].string;
}
return pasteboardContents;
}
先检查剪贴簿内容是否为网址(配合网页 JavaScript 复制的内容是网址带参数)是才读取,就不会每次开启 APP 都跳剪贴簿被读取。
目前只能如此,提示跳还是会跳,就只是让他更聚焦一点
另外苹果也增加了新的 API: DetectPattern ,帮助开发者能更精确判断剪贴簿资讯是我们要的,然后再读取,再跳提示,使用者能更安心、开发者也能继续使用此功能。
DetectPattern 也还在 Beta、且仅能使用 Objective-C 实作。
或是…
改用 Branch.io
自行实作 Branch.io 的原理
APP 先跳客制化 Alert 告知使用者,再读取剪贴簿(让使用者安心)
加入新隐私权条款
iOS 14 最新的 App Clips?,网页 -> 导 App Clips 轻量使用 -> 深入操作导 APP
延伸阅读
有任何问题及指教欢迎 与我联络 。
本文首次发表于 Medium (点击查看原始版本),由 ZMediumToMarkdown 提供自动转换与同步技术。