使用 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 主機篩選中介軟體進行設定 AllowedHosts 適合當做公開邊緣伺服器或直接轉送標頭時 Host

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