Risposte:
Esistono due modi, un httpCookies
elemento in web.config
consente di attivare requireSSL
che trasmette solo tutti i cookie, inclusa la sessione solo in SSL e anche l'autenticazione all'interno dei moduli, ma se si attiva SSL su httpcookies è necessario attivarlo anche all'interno della configurazione dei moduli.
Modifica per chiarezza:
inseriscilo<system.web>
<httpCookies requireSSL="true" />
Nell'elemento <system.web>
, aggiungi il seguente elemento:
<httpCookies requireSSL="true" />
Tuttavia, se hai un <forms>
elemento nel tuo system.web\authentication
blocco, questo sovrascriverà l'impostazione httpCookies
, ripristinandola al valore predefinito false
.
In tal caso, è necessario aggiungere l' requireSSL="true"
attributo anche 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.
roleManager
elemento, anche il suo attributo cookieRequireSSL="true"
dovrebbe essere impostato su true. Ref. msdn.microsoft.com/en-us/library/…
Le cose si complicano rapidamente se si parla di codice per il check-in in un ambiente aziendale. Abbiamo scoperto che l'approccio migliore è che 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.
Basandomi sulla risposta di @Mark D, utilizzerei web.config transforms per impostare tutti i vari cookie su Secure. Ciò include l'impostazione anonymousIdentification cookieRequireSSL
e httpCookies requireSSL
.
A tal fine imposteresti il tuo web.Release.config come:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<httpCookies xdt:Transform="SetAttributes(httpOnlyCookies)" httpOnlyCookies="true" />
<httpCookies xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
<anonymousIdentification xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" />
</system.web>
</configuration>
Se stai usando Autenticazione ruoli e moduli con ASP.NET Membership Provider
(lo so, è antica) vorrai anche impostare sicuro anche roleManager cookieRequireSSL
gli forms requireSSL
attributi e. In tal caso, web.release.config potrebbe apparire così (incluso sopra più nuovi tag per l'API di appartenenza):
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<httpCookies xdt:Transform="SetAttributes(httpOnlyCookies)" httpOnlyCookies="true" />
<httpCookies xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
<anonymousIdentification xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" />
<roleManager xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" />
<authentication>
<forms xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
</authentication>
</system.web>
</configuration>
Lo sfondo su web.config si trasforma qui: http://go.microsoft.com/fwlink/?LinkId=125889
Ovviamente questo va oltre la domanda originale del PO, ma se non li imposti tutti in modo sicuro, puoi aspettarti che uno strumento di scansione di sicurezza noterà e vedrai apparire bandiere rosse sul rapporto. Chiedimi come lo so. :)
<httpCookies requireSSL="true" />