2014-02-24 51 views
0

于是我找了两个应用之间传递数据的安全方式(试图实施IOS应用的安全提供商的OAuth)。这是我的安全和一些附加假设/需求定义:如何实现安全,应用程序间的通讯在IOS

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

本来我想过使用一些基于模式的方法来安装,但是这并不安全,因为如果应用程序C可为A和B register for the same scheme ,然后拦截该消息(违反要求1)。

检查重复的意图也是不够的,因为如果安装的应用程序A的用户不具备,则攻击者可以对应用程序A的方案,并绕过这个检查登记(违反规定2)。

我看着Facebook的IOS OAuth,他们似乎需要应用程序在Facebook注册时输入他们的“包ID”。我相当肯定Facebook在某种检查中使用这个捆绑ID,但不知道是什么。

任何帮助表示赞赏。

回答

1

有一个应用程序直接从URL方案调用另一个除了所以你没有办法,只好利用这个方法,然后找到它固定到您满意的方式,如果你想应用一个直接调用没有其他办法应用B.

如果你绝对不能使用的URL方案那么唯一的选择会是这样的应用程序A和应用B通过远程服务器或间接通信的一些令人费解的机制。

当应用程序在设备上调用Facebook时,应用程序已注册并获取,然后在其中对其中的Facebook标记进行硬编码,这可能是以某种方式用于确保身份验证 - 因此必须有一些实体正在进行应用程序,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

相关问题