localhostとRewriteLocalhost = falseでいくつかの例を作成すると、ナンシーはこれを無視し、サーバーを0.0.0.0でリッスンさせます
バグを再現した映画:
この例をコンパイルします;
netstat-anを実行して確認します
localhostを127.0.0.1に変更すると、すべて正常に機能します。
これが、.Net実装System.Net.HttpListener(Nancy 1.4で使用される基になるクラス)の動作方法です。 ローカルホスト用に構成されている場合、0.0.0.0にバインドされますが、このプロジェクトはそれを制御できません。 構成「RewriteLocalHost」が制御するのは、HttpListener.Prefixesに追加されるURLプレフィックスです。 trueの場合、「 http:// localhost :12345」は「http:// +:12345」に変更されます。これは、すべてのインターフェイスでhttpトラフィックを受け入れるというWindows netsh構文ですが、管理者以外のユーザーにはURL予約も必要です。
答えてくれてありがとう。 これは十分に文書化されるべきだと思います。 私の意見では、この動作は例外ではなく、セキュリティギャップである可能性があります。
私の意見では、この動作は例外ではなく、セキュリティギャップである可能性があります。
なぜこれが「セキュリティギャップ」なのですか?
@khellangはこの情報を見つけました:
サーバーのコンテキストでは、0.0.0.0はローカルマシン上のすべてのIPv4アドレスを意味します。 ホストに192.168.1.1と10.1.2.1の2つのIPアドレスがあり、ホスト上で実行されているサーバーが0.0.0.0でリッスンしている場合、それらのIPの両方で到達可能になります。
ソース: https :
Windowsで実行されているhttpサーバーの場合、アクセス可能なインターフェイス
URLACL構成によって異なります。
水、2018年6月6日、14:45 mfaticaearninに[email protected]書きました:
@khellang https://github.com/khellangはこの情報を見つけました:
サーバーのコンテキストでは、0.0.0.0はローカル上のすべてのIPv4アドレスを意味します
マシーン。 ホストに192.168.1.1と10.1.2.1の2つのIPアドレスがあり、
ホスト上で実行されているサーバーは0.0.0.0でリッスンし、両方で到達可能になります
それらのIPの
ソース:
https://www.howtogeek.com/225487/what-is-the-difference-between-127.0.0.1-and-0.0.0.0/—
コメントしたのでこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/NancyFx/Nancy/issues/2904#issuecomment-395207780 、またはミュート
スレッド
https://github.com/notifications/unsubscribe-auth/AEEilpOy-5_Z23cnX1SMmAN8Bqiy30TEks5t6D9kgaJpZM4UcsKT
。
0.0.0.0(および[::])へのバインドが何を意味するかは知っていますが、それが「セキュリティギャップ」であるという意味ではありません。 これはHttpListener
動作です。 localhost以外の場合は400ステータスコードで応答します。 これがセキュリティの問題であると思われる場合は、Microsoftにパッチを適用できるように開示する必要があります😊
残念ながら、ナンシーチームがフレームワークで使用されるすべての.NET APIのすべての動作を文書化できるとは思いませんが、気になる人がいれば、wikiを編集してこれに関する情報を追加してみてください。
@khellangこれはHttpListenerの動作であることを理解していますが、これもナンシーの動作です。 解決策が多すぎるため、これは修正できない可能性がありますが、これはまだギャップであり、文書化する必要があります。
私は金融パートナーと協力していますが、彼らのセキュリティポリシーは非常に制限されています。 HttpListenerは400と答えますが、HTTPiアプリケーション層です。 最下部にはセキュリティで保護されていないTCP層があり、誰でもメッセージを送信できます。 一部のポリシーでは、一部のアプリケーションは、外部アドレスからTCPポートをリッスンすることはできません。
1誰かがリクエストを送信し、サーバーが400に応答すると、これはいくつかの情報になります-わかりました、おそらくこれはHttpListener、またはナンシーです-わかりました、HttpListenerでいくつかの隠されたエクスプロイトを試してみましょう、おそらくこのマシンのいくつかのサービスにアクセスします。
2アプリケーションはurlaclを予約する必要があり、Windowsユーザーは管理者権限を持っている必要があります。 誰かの会社では、これは大きな問題です。
私の問題の解決策は127.0.0.1を使用することですが、この動作を見つけるために数時間を費やしています。 週末に時間を見つけて、これを行う権利がある場合は、ナンシーWikiとドキュメントを編集したいと思います。
議論してくれてありがとう!