Come abbiamo visto nello script precedente (https://www.aspitalia.com/script/1427/Impostare-Forward-Header-Sito-ASP.NET-Core-Reverse-Proxy.aspx), l'utilizzo di un reverse proxy con ASP.NET Core può necessitare di impostare le forwarded header per ottenere informazioni sulla richiesta originaria.
Se il nostro sito web è servito tramite Azure Application Gateway, esistono alcune ulteriori particolarità di cui dobbiamo essere al corrente.
Innanzi tutto, l'header utilizzato per il forwarded host non è quello standard, ma X-ORIGINAL-HOST:
public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); // ... altro codice qui ... builder.Services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost; options.ForwardedHostHeaderName = "X-ORIGINAL-HOST"; options.KnownNetworks.Clear(); options.KnownProxies.Clear(); }); var app = builder.Build(); app.UseForwardedHeaders(); // ... altro codice qui ... app.Run(); }
In secondo luogo, come possiamo notare, abbiamo dovuto svuotare la lista dei KnownProxies e KnownNetwork. Esse contengono gli IP (o i range di IP) dai quali ASP.NET Core accettarà le forwarded header. Nel caso di Application Gateway, l'IP sarà appartenente alla virtual network interna. Effettuando il Clear delle due liste, stiamo in pratica disabilitando questo controllo lato ASP.NET Core.
Ovviamente si tratta di un possibile buco di sicurezza, che dobbiamo mitigare restringendo il possibile chiamante al nostro servizio, per esempio implementando una regola sul firewall. Se stiamo facendo girare il nostro sito su App Service, possiamo sfruttare una restrizione basata su Service Endpoint, in maniera simile a come descritto in questo nostro precedente script:
https://www.cloudnativeitalia.com/script/229/Filtrare-Chiamate-HTTP-App-Service-Base-Servizio-Azure.aspx
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Limitare le richieste lato server con l'interactive routing di Blazor 8
Introduzione alle Container Queries
Creare una libreria CSS universale: Clip-path
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Code scanning e advanced security con Azure DevOps
Gestione dei nomi con le regole @layer in CSS
Sostituire la GitHub Action di login su private registry
Utilizzare Container Queries nominali
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Gestire la cancellazione di una richiesta in streaming da Blazor
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
I più letti di oggi
- Simulare Azure Cosmos DB in locale con Docker
- Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2024 - Milano
- .NET Conference Italia 2023 - Milano e Online