iOS应用程序沙箱,用于接受TCP套接字上的连接

时间:2017-06-27 00:59:38

标签: ios iphone sockets tcpsocket gcdwebserver

我在我的项目中使用了库GCDWebServer(https://github.com/swisspol/GCDWebServer),这要求我接受仅源自我的应用程序进程的连接,出于安全原因。我希望这是iOS应用程序沙箱开箱即用的东西,但事实并非如此。通过文件系统权限,沙箱似乎是针对UNIX域套接字(AF_UNIX)强制实施的。但是对于GCDWebServer使用的TCP / IP套接字(AF_INET),似乎没有沙盒。

我能够编写两个示例应用程序 - 客户端和服务器(使用不同的开发人员证书签名),并且可以让它们相互通信,没有任何问题。

我想知道在iOS上是否有某种强制执行相同的方法,实际上是在TCP套接字上启动HTTP服务器,但只接受来自同一进程的连接。我无法使用UNIX域套接字,因为要从HTTP服务器请求内容的客户端是AVPlayer,它不知道如何连接到我的应用程序的UNIX域插座。

2 个答案:

答案 0 :(得分:1)

我大约99%肯定你所要求的是不可能的。在没有编写网络内核扩展的情况下,我甚至认为在OS X中是可能的(即便如此,这也很有挑战性。)

当网络请求到达另一个进程时,它已经通过网络堆栈,并且已经失去了关于什么进程发起连接的任何概念(除非最近有所改进)。

实际上,您可以获得的最接近的是绑定到localhost接口上的随机端口,并在应用程序进入后台后立即将其删除。

迂腐地说,如果你设法以某种方式说服Apple计划建立一个VPN,理论上可以滥用VPN API,这样你就可以提供一个仅在你的应用程序中运行的专用网络。但是,它不会被允许进入应用程序商店。

但你为什么要这样做呢? AVPlayer非常能够从文件URL播放。

答案 1 :(得分:1)

您可以通过多种方式执行此操作:您可以检查GCDWebServer中的传入请求,并决定是否要对其进行响应或返回错误。

您可以添加其他应用无法了解的秘密标头,使用密钥对整个请求进行签名等等。