Bagikan melalui


Pemfilteran host dengan server web ASP.NET Core Kestrel

Meskipun Kestrel mendukung konfigurasi berdasarkan awalan seperti http://example.com:5000, Kestrel sebagian besar mengabaikan nama host. Host localhost adalah kasus khusus yang digunakan untuk mengikat ke alamat loopback. Host apa pun selain alamat IP eksplisit mengikat semua alamat IP publik. Host header tidak divalidasi.

Sebagai solusinya, gunakan Middleware Pemfilteran Host. Middleware ditambahkan oleh CreateDefaultBuilder, yang memanggil 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>();
}

Middleware Pemfilteran Host dinonaktifkan secara default. Untuk mengaktifkan middleware, tentukan AllowedHosts kunci di/appsettings.jsonappsettings.{Environment}.json . Nilainya adalah daftar nama host yang dibatasi titik koma tanpa nomor port:

appsettings.json:

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

Catatan

Middleware Header yang Diteruskan juga memiliki AllowedHosts opsi. Middleware Header yang Diteruskan dan Middleware Pemfilteran Host memiliki fungsionalitas serupa untuk skenario yang berbeda. Pengaturan AllowedHosts dengan Middleware Header yang Diteruskan sesuai saat Host header tidak dipertahankan saat meneruskan permintaan dengan server proksi terbalik atau load balancer. Pengaturan AllowedHosts dengan Middleware Pemfilteran Host sesuai ketika Kestrel digunakan sebagai server tepi yang menghadap publik atau ketika Host header langsung diteruskan.

Untuk informasi selengkapnya tentang Middleware Header yang Diteruskan, lihat Mengonfigurasi ASP.NET Core untuk bekerja dengan server proksi dan load balancer.