【问题标题】:How to implement secure inter-app messaging in IOS如何在 IOS 中实现安全的应用间消息传递
【发布时间】:2014-02-24 20:01:44
【问题描述】:

所以我正在寻找一种在两个应用程序之间传递数据的安全方式(尝试为 IOS 应用程序实现安全的 OAuth 提供程序)。这是我对安全的定义和一些额外的假设/要求:

  1. 我希望应用 A 调用应用 B 并向其传递令牌 TokenA,然后应用 B 基于此令牌获取一些结果,并将结果返回给应用 A。假设有一个名为应用 C 的恶意应用,我想要确保应用 C 无法拦截应用 A 和 B 之间的任何消息。
  2. 假设TokenA是app C可以获取的一些公开信息。我想确保应用 B 不会响应带有 TokenA 的请求,除非它来自应用 A。
  3. 假设应用 B 实际上是一个“服务提供者”,当应用 A 注册使用该服务时,应用 A 可以向应用 B 提供一些信息(例如 IOS 捆绑 ID)。
  4. 安全消息传递方法不得要求越狱手机。
  5. 假设可以在应用 A 和 B 之前或之后安装应用 C。

本来我想用一些基于scheme的方法,但这并不安全,因为如果app C可以register for the same scheme作为A和B,然后拦截消息(违反要求1)。

检查重复意图也是不够的,因为如果用户没有安装应用 A,攻击者可以注册应用 A 的方案并绕过此检查(违反要求 2)。

我查看了 Facebook 的 IOS OAuth,他们似乎要求应用在注册 Facebook 时输入其“捆绑 ID”。我非常肯定 Facebook 会在某种检查中使用此捆绑包 ID,但不确定是什么。

感谢任何帮助。

【问题讨论】:

    标签: ios iphone facebook security oauth


    【解决方案1】:

    除了 url 方案之外,没有其他方法可以让一个应用程序直接调用另一个应用程序,因此您别无选择,只能使用此方法,然后如果您希望应用程序 A 直接调用应用程序,请找到一种使您满意的方法来保护它B.

    如果您绝对不能使用 url 方案,那么唯一的其他选择是一些复杂的机制,例如应用 A 和应用 B 通过远程服务器间接通信。

    当应用程序在设备上调用 Facebook 时,该应用程序已注册并获得,然后在其中硬编码一个 facebook 令牌,该令牌可能以某种方式用于确保身份验证 - 因此必须有一些 3 个实体正在发生(一个应用程序、facebook 应用程序和 facebook 服务器)。

    但是,如果您将 url 方案与密钥库结合使用,我认为您可以确保两个应用程序之间的数据共享安全 - 应用程序 A 将一些加密数据发布到密钥库,然后通知应用程序 B 它可以通过 url 方案使用,然后应用 B 从密钥库中检索它。

    如果应用 A 和应用 B 知道如何加密数据,那么应用 C 是否知道那里有数据并且可以访问它并不重要。 (实际上我认为有一种使用钥匙串的方法可以用来排除应用程序 C 甚至无法访问它,但目前没有该信息可以确认)。 即使应用程序 C 可以访问钥匙串中的数据,您肯定也可以找到保护它的方法,以便应用程序 C 无法对其进行解码。

    我会首先对 iOS 的钥匙串进行大量研究,然后看看它可以为您提供什么。

    https://developer.apple.com/library/mac/documentation/security/conceptual/keychainServConcepts/iPhoneTasks/iPhoneTasks.html#//apple_ref/doc/uid/TP30000897-CH208-SW1

    【讨论】:

      猜你喜欢
      • 2012-02-04
      • 1970-01-01
      • 2023-03-28
      • 2010-09-21
      • 2018-01-19
      • 2012-01-03
      • 2017-03-08
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多