Proteggere un'intera area sotto HTTPS in ASP.NET MVC

di Marco De Sanctis, in ASP.NET MVC,

ASP.NET MVC possiede un filtro, stiamo parlando di RequireHttps, che ci permette di indicare quali controller o action richiedano una connessione SSL. L'effetto è che, in presenza di una connessione non protetta, la richiesta viene automaticamente ridirezionata sul protocollo HTTPS.

Tipicamente, però, ci sono intere aree di un sito che vanno protette tramite SSL: pensiamo, per esempio, all'intera gestione del carrello, dei pagamenti, o dell'account utente.

Con una semplice modifica, possiamo creare un filtro ereditato da RequireHttps, che però applichi la logica a una specifica area:

public class HttpsAreaFilter : RequireHttpsAttribute
{
  public string AreaName { get; set; }

  public HttpsAreaFilter(string areaName)
  {
    this.AreaName = areaName;
  }

  protected override void HandleNonHttpsRequest(
    AuthorizationContext filterContext)
  {
    var requestArea = filterContext.RouteData
      .DataTokens["area"] as string ?? string.Empty;

    if (string.Equals(requestArea, this.AreaName, 
        StringComparison.InvariantCultureIgnoreCase))
      base.HandleNonHttpsRequest(filterContext);
  }
}

Il metodo di cui abbimo effettuato l'override, ossia HandleNonHttpsRequest, viene chiamato dalla classe base tutte le volte che viene rilevata una connessione non protetta. A questo punto non dobbiamo far altro che verificare se la richiesta appartenga all'area indicata; in caso affermativo invochiamo la versione base del metodo, che effettuerà il redirect della richiesta su protocollo 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