2017-06-27 12 views
1

私はセキュリティ上の理由から、私のアプリケーションのプロセスからの接続だけを受け入れる必要がある私のプロジェクトでGCDWebServer(https://github.com/swisspol/GCDWebServer)ライブラリを利用しています。私はこれがiOSアプリのサンドボックスが提供するものだと考えていましたが、そうは思われません。サンドボックスは、ファイルシステムのアクセス権によって、UNIXドメインソケット(AF_UNIX)に対して強制されているようです。しかし、GCDWebServerで使用されるTCP/IPソケット(AF_INET)では、サンドボックスが存在しないようです。TCPソケットで接続を受け入れるためのiOSアプリサンドボックス

私は、クライアントとサーバー(異なる開発者証明書で署名された)の2つのサンプルアプリケーションを作成でき、問題なく相互に通信できるようになりました。

iOSで同じことを強制するいくつかの方法があったのか、基本的にはTCPソケット上でHTTPサーバーを起動し、同じプロセスからの接続のみを受け入れる方法があるのだろうかと思っていました。 HTTPサーバーからコンテンツを要求するクライアントはAVPlayerであり、アプリケーションのUNIXドメインソケットへの接続方法がわからないため、UNIXドメインソケットを使用することはできません。

+0

...秘密鍵などで全体の要求に署名、他のアプリを知っているではないでしょう秘密ヘッダを追加することができますそれはお勧めできるより適しています... – Zigglzworth

+0

私は多くのと思った。このアイデアは、HLS(HTTP Live Streaming)ビデオのセグメントをディスクにプリキャッシュし、キャッシュされている場合はローカルプロキシサーバーに配信したり、そうでない場合はリモートURLにリダイレクトしたりすることです。したがって、AVPlayerに提供するのは、localhost:8080/MyVideo/playlist.m3u8のようなURLです。これは、ビデオの読み込み時間を短縮するために行っている最適化です。使用例を説明してくれることを願っています。 – HungryTux

答えて

1

私はあなたが求めていることは不可能であることを約99%確信しています。私は、ネットワークカーネルの拡張機能を書かずにOS Xでも可能であるとは思っていません(それでもなお難しいでしょう)。

ネットワーク要求が別のプロセスに到達するまでには、ネットワークスタックを通過していますが、プロセスが接続を開始したという概念は失われています。

現実的には、あなたが得ることができる最も近いものは、localhostインターフェイス上のランダムなポートにバインドされ、アプリがバックグラウンドに投入されるとすぐに破棄されます。

VPNを構築しようとAppleに何とか説得してもらえれば、アプリケーション内でのみ動作するプライベートネットワークを提供できるようにVPN APIを乱用することは理論的に可能です。しかし、これはアプリストアで許可されることはありません。

なぜあなたはこれをやりたいのですか? AVPlayerは、ファイルURLから再生できる以上のものです。

+0

私はそれほど考えました。このアイデアは、HLS(HTTP Live Streaming)ビデオのセグメントをディスクにプリキャッシュし、キャッシュされている場合はローカルプロキシサーバーに配信したり、そうでない場合はリモートURLにリダイレクトしたりすることです。したがって、AVPlayerに提供するのは、http:// localhost:8080/MyVideo/playlist.m3u8のようなURLです。これは、ビデオの読み込み時間を短縮するために行っている最適化です。使用例を説明してくれることを願っています。 – HungryTux

+0

また、GCDWebServerは、アプリケーションがバックグラウンドになっているときにWebサーバーを破棄しているように見えます。私が心配しているのは、悪意のあるアプリがiOSのバックグラウンド機能の1つを使用して、自分のアプリで起動したローカルのプロキシサーバーに接続しようとするユースケースです。さらに、サーバーのソースコードに脆弱性がある場合(例:https://www.rapid7.com/db/modules/exploit/windows/http/sws_connection_bof)、これにより任意のコードが実行され、他のアプリケーションが取得するアプリケーションのリソースを制御します。 – HungryTux

1

GCDWebServerで受信したリクエストを検査し、応答するか、エラーを返すかを決定する方法はたくさんあります。

あなたはおそらく、あなたがそれをやりたい理由に手の込んだことができ、多分、代替があります

関連する問題