IIS ha una funzionalità per obbligare le pagine ad essere viste sotto HTTPS.
Se da un lato questa cosa è positiva per la sicurezza, dall'altro impatta sull'usabilità del sito poichè l'utente deve scrivere l'url completo nel browser.
Per evitare questi problemi, si può evitare di coinvolgere IIS ed inserire un HttpModule. Nell'evento BeginRequest, si recupera l'URL della pagina chiamata e se lo schema è HTTP, viene fatta una ricerca, in una sezione del file di configurazione appositamente creata, per verificare se la pagina deve essere protetta o meno; nel caso la pagina vada protetta, viene fatto un redirect alla stessa convertendo lo schema in HTTPS.
In questo modo le pagine rimangono sicure e non si ottiene nessun errore da IIS.
public class HttpToHttpsModule : IHttpModule { public void Dispose() {} public void Init(HttpApplication context) { context.BeginRequest += new EventHandler(context_BeginRequest); } void context_BeginRequest(object sender, EventArgs e) { if (!HttpContext.Current.Request.IsSecureConnection) { ProtectedPagesSection pages = (ProtectedPagesSection)ConfigurationManager.GetSection("protectedPagesSection"); foreach (NameValueConfigurationElement elem in pages.Pages) { System.Web.UI.WebControls.Literal lt = new Literal(); if (String.Compare(HttpContext.Current.Request.Url.LocalPath, lt.ResolveUrl(elem.Value), StringComparison.OrdinalIgnoreCase) == 0) HttpContext.Current.Response.Redirect(HttpContext.Current.Request.Url.ToString().Replace("http", "https")); } } } }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Leggere la configurazione da Azure KeyVault con logica di retry in ASP.NET Core
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Gestire la query string nell'output cache di ASP.NET Core
Gestire dati sensibili nella configurazione in ASP.NET Core
Gestire tipi complessi in query string grazie a IParsable in ASP.NET Core 7.0
Sfruttare l'output cache di ASP.NET Core 7 con i controller
Raggruppare i parametri di una minimal API in un singolo oggetto in ASP.NET Core
Sfruttare la local cache del browser tramite gli ETag in ASP.NET Core
Migliorare la scalabilità di ASP.NET Core 7 grazie all'output cache
Taggare la output cache in base al routing in ASP.NET Core
Catturare la telemetria degli eventi di output cache in ASP.NET Core
Migrare un progetto ASP.NET Core da .NET 6 a .NET 7