Domanda

Voglio che il mio sito Web abbia una casella di controllo su cui gli utenti possono fare clic in modo che non debbano accedere ogni volta che visitano il mio sito Web. So che dovrò memorizzare un cookie sul proprio computer per implementarlo, ma cosa dovrebbe essere contenuto in quel cookie?

Inoltre, ci sono errori comuni a cui prestare attenzione per impedire a questo cookie di presentare una vulnerabilità di sicurezza, che potrebbe essere evitato pur continuando a fornire la funzionalità "Ricordami"?

È stato utile?

Soluzione

Best practice per il cookie di accesso persistente migliorato

Puoi usare questa strategia descritta qui come best practice (2006) o una strategia aggiornata qui descritta (2015):

  1. Quando l'utente accede correttamente con Remember Me selezionato, viene emesso un cookie di accesso oltre al cookie di gestione della sessione standard.
  2. Il cookie di accesso contiene un identificatore di serie e un token . La serie e il token sono numeri casuali indiscutibili da uno spazio sufficientemente ampio. Entrambi sono memorizzati insieme in una tabella di database, il token è sottoposto a hash (sha256 va bene).
  3. Quando un utente non connesso visita il sito e presenta un cookie di accesso, l'identificatore della serie viene cercato nel database .
    1. Se l'identificatore di serie è presente e l'hash del token corrisponde all'hash per quell'identificatore di serie, l'utente viene considerato autenticato . Viene generato un nuovo token , un nuovo hash per il token viene archiviato nel vecchio record e viene inviato all'utente un nuovo cookie di accesso (va bene riutilizzare l'identificatore della serie ).
    2. Se la serie è presente ma il token non corrisponde, si presume un furto . L'utente riceve un avvertimento fortemente formulato e tutte le sessioni ricordate dell'utente vengono eliminate.
    3. Se il nome utente e la serie non sono presenti, il cookie di accesso viene ignorato .

Questo approccio fornisce una difesa approfondita. Se qualcuno riesce a perdere la tabella del database, non offre a un utente malintenzionato una porta aperta per impersonare gli utenti.

Altri suggerimenti

Vorrei memorizzare un ID utente e un token. Quando l'utente torna sul sito, confronta queste due informazioni con qualcosa di persistente come una voce di database.

Per quanto riguarda la sicurezza, non inserire nulla che consenta a qualcuno di modificare il cookie per ottenere vantaggi aggiuntivi. Ad esempio, non memorizzare i loro gruppi di utenti o la loro password. Tutto ciò che può essere modificato per eludere la tua sicurezza non deve essere memorizzato nel cookie.

Memorizza il loro UserId e un RememberMeToken. Quando effettuano il login con Remember Me selezionato, genera un nuovo RememberMeToken (che invalida qualsiasi altra macchina contrassegnata sia ricordata).

Quando tornano, cercali con il token Remember Me e assicurati che UserId corrisponda.

Analizzando personalmente le sessioni persistenti ho scoperto che semplicemente non vale il rischio per la sicurezza. Usalo se devi assolutamente farlo, ma dovresti prendere in considerazione una sessione del genere solo debolmente autenticata e forzare un nuovo accesso per tutto ciò che potrebbe essere utile a un utente malintenzionato.

Il motivo ovviamente è che i tuoi cookie contenenti la tua sessione persistente vengono rubati così facilmente.

4 modi per rubare i tuoi cookie (da un commento di Jens Roland sulla pagina < code> @splattne basato sulla sua risposta):

  1. Intercettandolo su una linea non sicura (sniffing dei pacchetti / dirottamento della sessione)
  2. Accedendo direttamente al browser dell'utente (tramite malware o accesso fisico alla casella)
  3. Leggendolo dal database del server (probabilmente SQL Injection, ma potrebbe essere qualsiasi cosa)
  4. Da un hack XSS (o simile exploit lato client)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top