次の方法で共有


ASP.NET Core Kestrel Web サーバーでのホストのフィルター処理

Note

これは、この記事の最新バージョンではありません。 現在のリリースについては、 この記事の .NET 10 バージョンを参照してください。

警告

このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、 .NET および .NET Core サポート ポリシーを参照してください。 現在のリリースについては、 この記事の .NET 10 バージョンを参照してください。

Kestrel は http://example.com:5000 などのプレフィックスに基づく構成をサポートしますが、Kestrel はほとんどのホスト名を無視します。 ホスト localhost は、ループバック アドレスへのバインドに使用される特殊なケースです。 明示的な IP アドレス以外のすべてのホストは、すべてのパブリック IP アドレスにバインドします。 Host ヘッダーは検証されません。

これを解決するには、Host Filtering Middleware を使用します。 ミドルウェアは CreateDefaultBuilder によって追加され、そこでは AddHostFiltering が呼び出されます。

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

Host Filtering Middleware は既定では無効です。 このミドルウェアを有効にするには、AllowedHostsappsettings.json/ で appsettings.{Environment}.json キーを定義します。 この値は、ポート番号を含まないホスト名のセミコロン区切りリストです。

appsettings.json:

{
  "AllowedHosts": "example.com;localhost"
}

Note

Forwarded Headers Middleware にも AllowedHosts オプションがあります。 Forwarded Headers Middleware および Host Filtering Middleware には、異なるシナリオ用に類似した機能があります。 リバース プロキシ サーバーまたはロード バランサーを使用して要求を転送するとき、AllowedHosts ヘッダーが保存されていない場合、Forwarded Headers Middleware に Host を設定するのが適切です。 AllowedHosts が一般向けエッジ サーバーとして使用されていたり、Kestrel ヘッダーが直接転送されたりしている場合、Host Filtering Middleware に Host を設定するのが適切です。

Forwarded Headers Middleware の詳細については、「プロキシ サーバーとロード バランサーを使用するために ASP.NET Core を構成する」を参照してください。