主機篩選搭配 ASP.NET Core Kestrel Web 伺服器

雖然 Kestrel 會根據首碼 (例如 http://example.com:5000) 來支援組態,但 Kestrel 大多會忽略主機名稱。 主機 localhost 是特殊情況,用來繫結到回送位址。 任何非明確 IP 位址的主機,會繫結至所有公用 IP 位址。 Host 標頭未驗證。

因應措施是使用主機篩選中介軟體。 中介軟體是由 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>();
}

預設停用主機篩選中介軟體。 若要啟用中介軟體,請在 appsettings.json/appsettings.{Environment}.json 中定義 AllowedHosts 索引鍵。 此值是以分號分隔的主機名稱清單,不含連接埠號碼:

appsettings.json

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

注意

轉送的標頭中介軟體也有 AllowedHosts 選項。 在不同的案例中,轉送標頭中介軟體和主機篩選中介軟體有類似的功能。 當不保留 Host 標頭,卻使用反向 Proxy 伺服器或負載平衡器轉送要求時,可使用轉送標頭中介軟體設定 AllowedHosts。 使用 Kestrel 作為公眾對應 Edge Server,或直接轉送 Host 標頭時,可使用主機篩選中介軟體設定 AllowedHosts

如需轉送標頭中介軟體的詳細資訊,請參閱設定 ASP.NET Core 以與 Proxy 伺服器和負載平衡器搭配運作