主機篩選搭配 ASP.NET Core Kestrel Web 伺服器
注意
這不是這篇文章的最新版本。 如需目前版本,請參閱本文的 .NET 8 版本。
警告
不再支援此版本的 ASP.NET Core。 如需詳細資訊,請參閱 .NET 和 .NET Core 支援原則。 如需目前版本,請參閱本文的 .NET 8 版本。
雖然 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 伺服器和負載平衡器搭配運作。