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.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente las Cuestiones de GitHub como mecanismo de retroalimentación para el contenido y lo sustituiremos por un nuevo sistema de retroalimentación. Para más información, consulta:Enviar y ver comentarios de