注意
這不是這篇文章的最新版本。 關於目前版本,請參閱 本文的 .NET 10 版本。
警告
不再支援此版本的 ASP.NET Core。 如需詳細資訊,請參閱 .NET 和 .NET Core 支持原則。 關於目前版本,請參閱 本文的 .NET 10 版本。
雖然 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>();
}
預設停用主機篩選中介軟體。 若要啟用中介軟體,請在 AllowedHostsappsettings.json/ 中定義 appsettings.{Environment}.json 索引鍵。 此值是以分號分隔的主機名稱清單,不含連接埠號碼:
appsettings.json:
{
"AllowedHosts": "example.com;localhost"
}
注意
轉送的標頭中介軟體也有 AllowedHosts 選項。 在不同的案例中,轉送標頭中介軟體和主機篩選中介軟體有類似的功能。 當不保留 AllowedHosts 標頭,卻使用反向 Proxy 伺服器或負載平衡器轉送要求時,可使用轉送標頭中介軟體設定 Host。 使用 AllowedHosts 作為公眾對應 Edge Server,或直接轉送 Kestrel 標頭時,可使用主機篩選中介軟體設定 Host。
如需轉送標頭中介軟體的詳細資訊,請參閱設定 ASP.NET Core 以與 Proxy 伺服器和負載平衡器搭配運作。