Filtrado de host con el servidor web Kestrel de ASP.NET Core

Si bien Kestrel admite una configuración basada en prefijos como http://example.com:5000, Kestrel pasa por alto completamente el nombre de host. El host localhost es un caso especial que se usa para enlazar a direcciones de bucle invertido. Cualquier otro host que no sea una dirección IP explícita se enlaza a todas las direcciones IP públicas. Los encabezados Host no están validados.

Como solución alternativa, use el Middleware de filtrado de hosts. El middleware se agrega por medio de CreateDefaultBuilder, que llama a 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>();
}

El Middleware de filtrado de hosts está deshabilitado de forma predeterminada. Para habilitarlo, defina una clave AllowedHosts en appsettings.json/appsettings.{Environment}.json. El valor es una lista delimitada por punto y coma de nombres de host sin los números de puerto:

appsettings.json:

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

Nota:

Middleware de encabezados reenviados también tiene una opción AllowedHosts. El Middleware de encabezados reenviados y el Middleware de filtrado de hosts tienen una funcionalidad similar en diferentes escenarios. Establecer AllowedHosts con el Middleware de encabezados reenviados es adecuado cuando el encabezado Host no se conserva mientras se reenvían solicitudes con un servidor proxy inverso o un equilibrador de carga. Establecer AllowedHosts con el Middleware de filtrado de hosts es adecuado cuando se usa Kestrel como un servidor perimetral de acceso público o cuando el encabezado Host se reenvía directamente.

Para más información sobre el Middleware de encabezados reenviados, vea Configurar ASP.NET Core para trabajar con servidores proxy y equilibradores de carga.