Come posso impostare il flag Secure su un cookie di sessione ASP.NET?
-
22-07-2019 - |
Domanda
Come posso impostare il flag Secure su un cookie di sessione ASP.NET, in modo che venga trasmesso solo su HTTPS e mai su un semplice HTTP?
Soluzione
Esistono due modi, un elemento httpCookies
in web.config
ti consente di attivare requireSSL
che trasmette solo tutti i cookie inclusa la sessione solo in SSL e anche l'autenticazione interna dei moduli, ma se attivi SSL su httpcookies deve anche attivarlo anche all'interno della configurazione dei moduli.
Modifica per maggiore chiarezza:
Metti questo in <system.web>
<httpCookies requireSSL="true" />
Altri suggerimenti
Nell'elemento <system.web>
, aggiungi il seguente elemento:
<httpCookies requireSSL="true" />
Tuttavia, se hai un elemento <forms>
nel tuo blocco system.web\authentication
, questo sovrascriverà l'impostazione in httpCookies
, riportandola al valore predefinito false
.
In tal caso, è necessario aggiungere anche l'attributo requireSSL="true"
all'elemento form.
Quindi finirai con:
<system.web>
<authentication mode="Forms">
<forms requireSSL="true">
<!-- forms content -->
</forms>
</authentication>
</system.web>
Vedi qui e qui per la documentazione MSDN di questi elementi.
Le cose si complicano rapidamente se si parla di codice archiviato in un ambiente aziendale. Abbiamo scoperto che l'approccio migliore è che il web.Release.config contenga quanto segue:
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
<authentication>
<forms xdt:Transform="Replace" timeout="20" requireSSL="true" />
</authentication>
</system.web>
In questo modo, gli sviluppatori non sono interessati (in esecuzione in Debug) e solo i server che ottengono build di rilascio richiedono che i cookie siano SSL.
sicuro: questo attributo indica al browser di inviare il cookie solo se la richiesta viene inviata su un canale sicuro come HTTPS. Ciò contribuirà a proteggere il cookie dal passaggio di richieste non crittografate. Se è possibile accedere all'applicazione sia su HTTP che su HTTPS, esiste la possibilità che il cookie possa essere inviato in chiaro.