Filtro host con ASP.NET server Web Core Kestrel

Sebbene Kestrel supporti la configurazione basata su prefissi, ad http://example.com:5000esempio , Kestrel ignora in gran parte il nome host. L'host localhost è un caso speciale usato per l'associazione agli indirizzi di loopback. Qualsiasi host che non sia un indirizzo IP esplicito esegue l'associazione a tutti gli indirizzi IP pubblici. Le intestazioni Host non vengono convalidate.

Come soluzione alternativa, usare il middleware di filtro host. Il middleware viene aggiunto da CreateDefaultBuilder, che chiama 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>();
}

Per impostazione predefinita, il middleware di filtro host è disabilitato per impostazione predefinita. Per abilitare il middleware, definire una AllowedHosts chiave in/appsettings.jsonappsettings.{Environment}.json . Il valore è un elenco con valori delimitati da punto e virgola di nomi host senza numeri di porta:

appsettings.json:

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

Nota

Il middleware delle intestazioni inoltrate include anche un'opzione AllowedHosts. Il middleware di intestazioni inoltrate e il middleware di filtro host hanno funzionalità simili per diversi scenari. L'impostazione di AllowedHosts con il middleware delle intestazioni inoltrate è appropriato se l'intestazione Host non viene mantenuta durante l'inoltro delle richieste con un server proxy inverso o il bilanciamento del carico. L'impostazione AllowedHosts con il middleware di filtro host è appropriata quando Kestrel viene usata come server perimetrale pubblico o quando l'intestazione Host viene inoltrata direttamente.

Per altre informazioni sul middleware di intestazioni inoltrate, vedere Configurare ASP.NET Core per l'uso di server proxy e servizi di bilanciamento del carico.