Un HttpModule per passare automaticamente da HTTP a HTTPS

di Stefano Mostarda, in ASP.NET 2.0, Security, HttpHandler,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi