Il problema qui è il seguente:
L'utente A accede. Si crea un valore di cookie per rappresentare quell'accesso dell'utente A e si invia questo valore di cookie al browser dell'utente A in cui verrà memorizzato.
Chiunque conosca il valore di quel cookie può pretendere di essere l'utente A. Questo non è un bug, ma una funzionalità, perché lo scopo di avere il cookie è che l'utente può identificarsi da solo facendo in modo che il browser invii il cookie al server insieme a tutte le richieste.
Ciò che è necessario assicurarsi è che nessun'altra persona abbia la possibilità di leggere il valore del cookie. Ci sono molte cose che dovresti fare per ridurre la possibilità che altre persone si impadroniscano del valore del cookie dell'utente A:
- Consenti solo di utilizzare il tuo sito tramite https. Reindirizza alla versione https quando un utente tenta di accedere alla versione http di una pagina. Ciò impedisce agli aggressori di leggere il valore del cookie sul cavo durante il trasferimento.
- Imposta gli attributi
HTTPONLY
e SECURE
del cookie. HTTPONLY
impedisce al codice javascript di leggere il valore del cookie. SECURE
impedisce al browser di inviare il cookie quando l'utente tenta di accedere alla versione http di una pagina. Puoi abilitare questi attributi in ASP.net impostando gli attributi httpOnlyCookies
e requireSSL
nel file web.config
.
- Dire al browser di eliminare il cookie quando l'utente si disconnette manualmente. Se stai utilizzando l'autenticazione basata su form,
FormsAuthentication.SignOut()
lo farà già.
- Se hai un sito con dati molto sensibili, usa javascript per implementare una disconnessione automatica dopo un certo periodo di inattività dell'utente, dicendo anche al browser di eliminare il cookie.
- Utilizza un cookie senza attributo
expires
, in modo che il cookie non venga memorizzato su disco dal browser e venga automaticamente eliminato dal browser al termine della sessione del browser.
- Educa i tuoi utenti a disconnettersi manualmente dal tuo sito prima di lasciare il sito, quando si trovano su un computer che non è il loro. (In effetti, istruisci i tuoi utenti a non accedere al tuo sito da computer di cui non si fidano.)
Non è chiaro dalla tua domanda come si genera il valore del cookie. Come Steve ha scritto, il contenuto dei cookie deve essere crittografato in modo tale che l'utente non possa modificare il valore del cookie, scambiando l'id utente e mantenendo comunque un contenuto di cookie valido. Se si utilizza l'autenticazione basata su form in asp.net, ciò accade automaticamente, il cookie viene crittografato con una chiave di macchina memorizzata sul proprio server (ad esempio in IIS).
Se hai più applicazioni in esecuzione sullo stesso server, assicurati che ogni applicazione utilizzi il proprio set di chiavi della macchina, in modo che un utente malintenzionato non possa utilizzare il cookie generato da un'applicazione per accedere a un'altra applicazione sullo stesso server.