你可能看到许多应用未经允许粘贴粘贴版内容的新闻。在讨论它们之前,我们先来看看什么是全局剪贴板。
开发者在开发软件的过程中,会用到许多第三方提供的现有功能,或设备厂商提供的现有功能。这次舆论中心的全局剪贴板其实是 Apple 开发者组件中的一个常用类别:UIPasteboard
为什么剪贴板是所有应用通用的呢?其实这也好说,剪贴板的作用其实就是临时存储图片或文字,以便用户在跨设备,或者跨应用粘贴时迅速提取到已复制好的内容。因此有必要设计成所有应用程序都可以轻易将内容存进去,或者取出来。
正常来说,开发者将图片和文字复制后,这些内容就会进剪贴板里。以下图中的文字为例,当我们点击复制按钮时,这段文字便会存入剪贴版中。实现代码如下:UIPasteboard.general.string = "不平庸,喜欢高质量且优秀的设计,致力于打造提升生活品质的好物。"
当用户想把剪贴板的内容提取出来时,一般会明确点击一个按钮,比如粘贴。当检测到粘贴按钮被点按时,程序员会用这样一段代码把剪贴板中的文字提取出来,并放在文本框中。实现代码如下:textfield.text = UIPasteboard.general.string。这本一直风平浪静,直到 iOS 14 新增了一个功能,当应用程序从剪贴板粘贴出内容时发出提醒,如下图中,我点击粘贴按钮后出现此提示。
这个提醒的用途,便是明确告诉用户,哪一个应用,在这个时间里获取了你的剪贴板中的内容。于是乎一些在不正常时间,没有明确理由,非用户操作便访问用户剪贴板数据的应用就暴露出来了。这次曝光的应用偷窃剪贴板信息有如下两种情况:
第一种情况:以抖音为代表的,在用户输入时粘贴剪贴板信息。有些人在这里感到困惑,认为抖音是在监听用户正在输入的内容,实则不然。抖音是使用了文字编辑通知 textFieldDidEndEditing (_:) 这个文本框自带的通知功能,在用户编辑的文字变更时,将剪贴板的文字复制出去了。具体表现就是下图中的每输入一个字便会触发一次剪贴板粘贴。
第二种情况:是以主流应用为代表的,每次切换应用时进行监听。这类的剪贴板监听是在应用程序变成前台应用时触发。即开发者使用了应用进入前台通知 didBecomeActiveNotification 这个函数时。在每次该应用变为前台应用时,窃取剪贴板信息。
讲了这么多你也许会好奇,粘贴出来的文字去哪里了呢?为什么要盗窃剪贴板信息?本文的后半段,我们从开发者,设计者和广告联盟的角度来讨论信息可能的去处。注意:我不对以上两种情况对号入座,大家可以自行判断。
开发者的角度:经过这几天我对开发者群体吐槽的观察,确实存在开发者编码不严谨导致误触发这个提醒的无心之失。这些开发者想要贴板中是否有内容,于是用了先粘贴出来的方法,然后判断粘贴出的东西是否为空,最后决定是否需要执行某些操作。这种情况没有任何信息的泄漏,纯粹是开发者对框架不熟悉所致。正确的方法是用 .hasStrings 来直接询问剪贴板中是否有内容,即不会侵犯用户隐私,也不需要粘贴内容出来。
产品设计者的角度:在产品规划之初,设计产品的人都会被要求做一些潜在客户的画像。下图的中的小哥,这些画像是对产品潜在典型用户的描述。比如你设计了一款帮助艺术家找工作的软件,客户画像可能就是刚毕业的大学生,25 岁左右,喜欢静物写生这样的。
这类客户画像本不应涉及任何隐私问题,直到部分动了邪念的软件开发商开始思考一个深入灵魂的问题:如果我们用用户的真实信息来做用户画像怎么样?我们对用户了解的越多,就越可能知道他的喜好,建立更真实的用户数据库。明着问用户要他们肯定不给,那就悄悄的来,去偷用户的输入法内容,去偷用户的剪贴板。
在 iOS 端, Apple 鼓励大家用自带的输入法来防止输入法内容被偷。不幸的是,这类明着偷用户剪贴板内容的行为,曾经没有任何办法禁止,甚至无法去判断厂商曾经偷了这些信息去做什么。这些数据大多是直接传回厂家自己的服务器,之后做了什么无从得知。因此应用商店审核流程对此类隐私泄露毫无办法。
更可悲的事实是,当你登录一个软件后,硬件提供商苦心设计的所有为了保护你的隐私的方法都什么用了。这些保护隐私的措施是建立在尽可能混淆你的身份,让别人看不出你的基础之上。当你登录后,便等同于自己出示身份证,来帮助此应用的尝试建立对你的用户分析的数据库。这些数据库大多数时候都被用作一个很朴实,却又特别吸金的事情上:广告。
广告联盟的角度:在过去,你也许会担心某个应用程序偷走了你的信息。但现在,你手机中的许多应用程序都有了统一的主脑,这就是广告联盟。
在软件开发过程中,开发者几乎都会用一些别的已经写好的模块添加进自己的程序中。我们把这个流程叫做「避免重新开发车轮」。而这些模块的提供者,很多都是巨头,比如脸书。每个使用这些模块软件,就不得不默认授权了你的部分隐私被大公司拿走。无论 Android ,iOS,都一样,无法避免。
这就是大家为什么会发现,我明明没用这个软件查询这些内容,为什么其他广告公司也知道我的信息了呢?这往往不是软件的原开发者泄露的你的信息,而是这些第三方模块的拥有者在倒卖这些信息。还记的上个月有个新闻,脸书的一键登录出了故障,所有内嵌脸书登录选项的应用都同时出现了闪退的情况。即便你没有使用脸书登录,脸书的代码也依旧在后台执行了。使用了广告联盟模块的软件往往会出现非常一致的行为,特别像上文中的一种情况。
你的详细信息,可以被与你无关的人随意选择。为了让你广告联盟了解你的程度有一个感知,我截取了 Google 广告联盟中广告主可以选择的用户范围。做为广告主,可以选择用户的所在地,婚姻状况,有几个孩子,受教育程度,平时喜欢浏览产品的类别,喜欢访问什么类型的网站,收入水平,兴趣爱好。它对你的了解之深,甚至可以精确到上一秒,你讨论了什么话题。
可能你自己都没意识到:
曾经家里来了贼,悄无声息的,偷走了你的隐私。
,