首页 文章

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

提问于
浏览
1

我在我的一个项目中使用库GCDWebServer(https://github.com/swisspol/GCDWebServer),这要求我接受仅来自我的应用程序的连接's process, for security reasons. I was hoping this is something that the iOS app sandbox would provide out of the box, but that doesn'似乎是这种情况 . 通过文件系统权限,沙箱似乎是针对UNIX域套接字(AF_UNIX)强制实施的 . 但是对于GCDWebServer使用的TCP / IP套接字(AF_INET),似乎没有沙盒 .

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

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

2 回答

  • 1

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

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

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

    小心翼翼地,如果你设法以某种方式说服Apple计划 Build 一个VPN,理论上可以滥用VPN API,这样可以让你提供一个仅在你的应用程序中运行的专用网络 . 但是,它不会被允许存储在应用程序商店中 .

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

  • 1

    有很多方法可以做到这一点:您可以检查GCDWebServer中的传入请求,并决定是否要响应它或返回错误 .

    您可以添加其他应用程序不知道的秘密标头,使用密钥签署整个请求等等...

相关问题