<p>ナンシーは常にローカルホストを0.0.0.0に書き換えます</p>

作成日 2018年06月06日  ·  7コメント  ·  ソース: NancyFx/Nancy

説明

localhostとRewriteLocalhost = falseでいくつかの例を作成すると、ナンシーはこれを無視し、サーバーを0.0.0.0でリッスンさせます

バグを再現した映画:

nagranie

再現する手順

この例をコンパイルします;

Program.txt

netstat-anを実行して確認します

localhostを127.0.0.1に変更すると、すべて正常に機能します。

システム構成

  • ナンシーバージョン:1.4.4
  • ナンシーホスト

    • [] Nancy.Hosting.Self

  • 環境(オペレーティングシステム、バージョンなど):Windows 10
  • .NET Frameworkバージョン:4.6

全てのコメント7件

これが、.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とドキュメントを編集したいと思います。

議論してくれてありがとう!

このページは役に立ちましたか?
0 / 5 - 0 評価