【发布时间】:2016-11-14 14:48:53
【问题描述】:
我想创建一个静态库来执行一些安全敏感操作。对我来说重要的是,使用我的静态库的其他应用程序无法访问静态库的数据。
实际上,重要的是,我在运行时保存在磁盘和内存中的数据都不能通过主机应用程序访问。所以我的问题是如何为静态库提供单独的沙箱,以便主机应用程序无法访问这些信息。
我知道有一些安全敏感的库有.a 文件,我想知道它们如何为他们的应用程序提供安全性。这是paypal iOS SDK 的链接:
https://github.com/paypal/PayPal-iOS-SDK
更新
根据下面的开发者链接,我们可以在授权文件中使用沙盒密钥来启用沙盒。 它说iOS应用程序默认是沙盒的。 但是 iOS 静态库呢?它们是否也被沙盒化了?如果不是,我们如何进行沙箱处理?
更新
在Android OS中开发项目库时,可以在该项目的manifest中定义一个标签,强制Android OS将库代码运行到单独的进程中(顺便说一下宿主进程无法访问运行时库进程的内存)。所以我认为我们也应该在 iOS 上为这种行为提供一个等效的选项。
更新
请注意,即使在运行时,我们也希望针对宿主应用保护数据。通过反射访问 UI 元素的数据是一大问题。假设有人在 Paypal SDK 中输入其卡数据,并且主机可以通过反射访问输入的数据。然后主机应用程序的开发人员可以访问所有卡信息及其身份验证数据并将其用于他们的用途。
【问题讨论】:
-
我不明白您的评论,请您详细说明一下吗?
-
iOS Security Enclave 可以为您生成一个安全密钥对,其私有部分永远不会离开 Security Enclave,但我认为这对您的情况有帮助。您可以将您的库包装在一个单独的应用程序中,该应用程序当然会被沙盒化,并使用custom URL scheme 在您的应用程序和库应用程序之间进行通信。
-
请注意,background execution 存在限制,您可能不得不假装执行一项允许的后台活动。
-
@JoshSanford 我不想做任何后台操作,我只想找到一种方法,当用户按下主机应用程序中的按钮并打开我的库的视图控制器时,主机应用程序无法访问我的库在运行时保存的数据。一种方法是告诉操作系统在单独的操作系统进程(与应用程序主进程分开)中运行我的库数据。
标签: ios security cocoa-touch static-libraries sandbox