Filtrage de l’hôte avec ASP.NET serveur web Core Kestrel

Bien que Kestrel prenne en charge la configuration en fonction de préfixes tels que http://example.com:5000, Kestrel ignore en grande partie le nom d’hôte. L’hôte localhost est un cas spécial utilisé pour la liaison à des adresses de bouclage. Tout hôte autre qu’une adresse IP explicite se lie à toutes les adresses IP publiques. Les en-têtes Host ne sont pas validés.

En guise de solution de contournement, utilisez le middleware de filtrage d’hôtes. L’intergiciel (middleware) est ajouté par CreateDefaultBuilder, qui appelle 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>();
}

Le middleware de filtrage d’hôtes est désactivé par défaut. Pour activer l’intergiciel, définissez une clé AllowedHosts dans appsettings.json/appsettings.{Environment}.json. La valeur est une liste délimitée par des points-virgules des noms d’hôte sans numéros de port :

appsettings.json:

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

Notes

Le middleware des en-têtes transférés a aussi une option AllowedHosts. Le middleware des en-têtes transférés et le middleware de filtrage d’hôtes ont des fonctionnalités similaires pour différents scénarios. La définition d’AllowedHosts avec le middleware des en-têtes transférés est appropriée quand l’en-tête Host n’est pas conservé durant le transfert des requêtes avec un serveur proxy inverse ou un équilibreur de charge. La configuration de AllowedHosts avec l’intergiciel de filtrage d’hôte est appropriée quand Kestrel est utilisé en tant que serveur Edge public ou quand l'en-tête Host est directement transféré.

Pour plus d’informations sur le middleware des en-têtes transférés, consultez Configurer ASP.NET Core pour l’utilisation de serveurs proxy et d’équilibreurs de charge.