Gestisci modifica cookie del browser per l'applicazione Web in .Net Mvc

3

Sto sviluppando un'applicazione Web sensibile con .net MVC e sto salvando le credenziali dell'utente dopo aver effettuato l'accesso con i cookie.

Il problema è che un utente è in grado di accedere con il proprio nome utente e password. Quindi è in grado di modificare i cookie e ripristinare i cookie su un altro id utente. Sta causando un problema di sicurezza. Come possiamo impedirlo?

    
posta user142730 22.03.2017 - 14:58
fonte

2 risposte

3

Utilizza un valore del cookie sicuro da crittografia in modo che la modifica del valore invalida la sessione. In altre parole

cookie = encrypt (nome utente, scadenza, segreto)

Dove solo la tua applicazione conosce il segreto. Detto questo, non farlo da solo. Ci sono un sacco di modi in cui ciò può essere fatto in modo sicuro in MVC.

    
risposta data 22.03.2017 - 15:07
fonte
0

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:

  1. 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.
  2. 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 .
  3. 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à.
  4. 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.
  5. 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.
  6. 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.

    
risposta data 22.03.2017 - 15:25
fonte

Leggi altre domande sui tag