Facebook “SDK 攻击” 后的一些思考

3116次阅读  |  发布于4年以前

前方警告:我们并没有生活在最美好的时代。如果您是那种担心在线隐私和安全性的人,那么这个帖子可能会引起您的焦虑。

2020年5月6日,差不多晚上 8 点的时候,我刚结束一天的工作,正准备从我最喜欢的地方之一订购晚餐,然后我就发现这个应用根本无法启动。每次启动时就崩溃了。

碰巧我有一个在该应用的工程团队工作的朋友,所以我向他们发送了一段这个问题的视频,以确保他们了解这一情况。然而他们告诉我这实际上是 Facebook SDK 的问题,并且其他许多iOS应用程序也因为同样的问题崩溃了。所以我尝试启动TikTok,崩了;Spotify,崩了;我作为承包商工作的应用程序,也崩了。这太糟糕了。

这个问题是由于Facebook服务器向其SDK发送了一些错误数据,导致 SDK 中的代码 crash,进而导致运行SDK的应用程序崩溃。由于这是在SDK初始化期间发生的(在启动应用程序后立即发生的事情),因此这些应用程序变得无法使用。

我后来找到了一种解决方法,可以让我订购晚餐。由于崩溃是由Facebook服务器发送的数据引起的,因此我使用 Pi-Hole 阻止了我网络上的 facebook.com 域(及其所有子域)。这样我就不会因为Facebook而挨饿了。

SDK 带来的问题

这些天人们也在讨论,像苹果和谷歌这样的公司是如何控制其生态系统,它们的垄断地位到底有多危险呢?我不会否认这一点,但是我认为存在另一个更大的问题,这个问题潜伏在我们的应用程序中已经有好几年了,却没有引起足够多的注意:第三方SDK不断涌现。

你使用的每个应用都很可能正在运行来自 Facebook,Google 和其他数据收集与数据挖掘公司的代码。由于此代码的集成方式(通过在构建时链接到动态库),这意味着这些公司可以有效地控制这些应用程序,或者更糟的是,访问这些应用程序可以访问的所有数据。

昨天我们就见证了这种功能的演示:似乎是Facebook激活了一个“应用程序终止开关”,并且它关闭了许多人喜欢的iOS应用程序-苹果的 启示录 https://www.youtube.com/watch?v=z_ceZG0ppkY 视频从未如此真实。当然,这是一个失误,并不是有意为之,但它说明了一点,即他们确实可以控制包含其代码的应用程序。

即使您未在应用中使用Facebook登录,该应用也会在后台运行Facebook的代码。即便你没有 Facebook 账号,也同样可以跟踪你,他们可以很好地用于跟踪行迹。

技术解决方案

在技术上,可以通过一些变通的方法来解决这种问题。许多开发者和用户都希望使用 Facebook 登录,因此“仅删除它” 并不是那么的容易。同样仅使用 Apple 登录也不是很现实。在编程中使用 “仅仅” 这个词,会让高级开发人员感到吃惊。

第一种解决方案是无需使用 SDK 即可使用 Facebook 的登录等功能。Facebook 实际上提供了有关如何实现这一操作的文档。在不使用 SDK 的情况下实现登录流程,可以确保只有实际使用 Facebook 登录的用户才由 Facebook 处理其数据。

另一种解决方案是实现某种形式的沙盒,将这种类型的 SDK 与宿主应用程序的代码隔离。苹果的操作系统已经广泛使用了 XPC,但并未向开发人员开放这种功能。

将分析 SDK 与宿主应用程序代码隔离,可以防止这些 SDK 在宿主没有显式将数据发送给 SDK 时,私下获取用户数据。这同样也可以实现为某种形式的权限对话框。可以假设一下这种情景,启动应用程序时,提示“此应用程序希望将您的位置发送到Facebook。是否可以?”

开发人员仅需谨慎使用他们所调用的 SDK 代码即可。而现实情况是,对于 Facebook SDK 的问题,即使只在应用程序中包含 SDK 而没有调用过任何方法,也会有问题。

需求层面的解决方案

许多人会将这类问题归咎于工程师。“当然是工程师的错,谁让他们使用了这些 SDK 呢?”

尽管从技术上说,是工程师们将这些 SDK 集成到公司的应用中,但通常这些需求并不是工程师们提出的。市场营销部门的人员可能希望对 Facebook 的渠道进行更好的分析,他们与产品人员沟通,而产品人员则将需求提交给开发人员。

这就是问题所在。这种类型的决策必须经过工程设计,营销部门对这种将第三方代码添加到应用中不应有太大的决策权。

不过,这种情况很难改变,因此更多的可能是从技术上来解决。

就差您点一下了

作者 | Guilherme Rambo
来源 | https://rambo.codes/

Copyright© 2013-2019

京ICP备2023019179号-2