起動時に自動的に起動される、localhostで実行されるデスクトップでの自分用のWebアプリケーションの開発を検討しています。そのためにポートを選択する必要があります。私が心配しているのは、他のプログラムがこのポートで利用可能なものをフェッチできることです。
これはウイルスと考えられるかもしれませんが、ポートをリッスンすることは、たとえばキーロガーよりも邪魔にならないと思います。実際、アプリケーションはすでにこのポートを正当な目的で使用している可能性があります。
Localhostのポートを選択するためのベストプラクティス(それが既にそれほど悪くない場合)と、それが可能であれば、それを保護するためのベストプラクティスは何ですか?
Linuxでは、1024
以下のポートは特権ポートと呼ばれます。これらのポートをリッスンするアプリケーションには特権が必要です。つまり、アプリケーションはrootとして実行するか、CAP_NET_BIND_SERVICE
capability にする必要があります。したがって、1024
より大きいポートを使用できます。
一般的な(およびIANAが割り当てた)Webポートは、HTTPの場合は80
、HTTPS(TLS over HTTP)の場合は443
です。 HTTPの代替ポートは8080
で、これは特権ポートではありません。できます。
また、アプリケーションがリッスンしているinterface
が loopback interface にバインドされていることを確認することもできます。
私が心配しているのは、他のプログラムがこのポートで利用可能なものをフェッチできることです。
まず、サーバーがlocalhost(IPV4の場合は127.0.0.1
、IPV6の場合は::1
、またはその両方)にバインドしている場合、localhostで実行されているクライアントのみがアクセスします。 ローカルプログラムへの接続を制限したい場合は、サーバーがそれらのループバックアドレスのいずれかにバインドすることを確認してください、および0.0.0.0
または::
(すべてのインターフェイスを示す)。
誰かがlocalhostループバックデバイスに接続できる不正アクセス実行ソフトウェアを持っている場合、はるかに大きな問題が発生する可能性があります。これは問題ではないと思います。つまり、コンピュータを他の人と共有しているのでない限り、127.0.0.1
や::1
にバインドして、それ。
コンピューターを他のユーザーと共有している可能性があります。つまり、Shellサービスを実行しています。これは、アクセスを許可していることを意味しますあなたのシステムに。この場合、(うまくいけば信頼できる)ユーザーの1人がループバックバインドサービスに接続できるかどうかは、最も気にする必要のないことの1つです。 他の人をファイアウォールの後ろに入れ、ユーザーランドに入れると、あなたは彼らにあなたのネットワーク全体を調査する能力を与えます!ルーター、プリンター、およびネットワークに接続している電話でもソフトウェアを実行でき、これらのデバイスを保護するのはサーバーよりもはるかに困難です。
KVM、Xenなどの仮想化を使用してそのようなユーザーをサンドボックス化し、独自の仮想環境(仮想ネットワークインターフェース)を再生して、そのような仮想ネットワークインターフェースにファイアウォールをインストールする機能を提供します。
Localhostのポートを選択するためのベストプラクティス(それがすでにそれほど悪くない場合)と、それが可能であれば、それを保護するためのベストプラクティスは何ですか?
繰り返しますが、非ループバックインターフェイスからのインバウンド接続はnotがループバックインターフェイス。お使いのOSがこのような接続を許可している場合は、著しく構成が間違っているか、Windows XP、サービスパック1a以下(それ自体が別の問題です)です。
主な懸念事項は、信頼できないユーザーがユーザーランドで直接コードを実行できないようにすることです。そのため、コンピューターを他の人と共有している場合は、管理者としてsandboxそれらの他の人々は、彼らが見ることができる外部のもので細かい粒度のアプローチを維持します。サンドボックス化されていると仮定すると、仮想ネットワークインターフェイス経由でのみホストと通信できるため、ホストの127.0.0.1
または::1
- boundサービスに接続できませんが、まだネットワークをスキャンできます...
この未割り当てポートのリストを確認してください https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
49k以降を選択する
IPCにソケットを使用している場合は、PF_INETファミリを使用します