Utilizzo dei token per mantenere gli utenti connessi

1

Sono uno sviluppatore web PHP che ha letto recentemente sulla sicurezza e di conseguenza mi è venuta in mente questa domanda: come autenticare in modo corretto e sicuro gli utenti già registrati con un token? Ho visto la tecnica menzionata in diversi punti, ma non ne ho trovato una dimostrazione.

Ne ho implementato personalmente una versione che funziona così:

  1. L'utente accede utilizzando il nome utente e la password. (Memorizzato usando un hash pbkdf2 a 1024 bit)
  2. Viene generato un token casuale seguito da MD5 utilizzando il seguente codice PHP: uniqid(mt_rand(), true)
  3. Queste informazioni sono memorizzate nel database, una sessione PHP e un cookie.
  4. Quando l'utente accede a una pagina, viene chiamata una funzione che controlla se il token nella sessione o il cookie corrisponde al token memorizzato nel DB. Se lo fa, l'utente rimane connesso, in caso contrario, l'utente è disconnesso.
  5. Ogni volta che viene inviata una richiesta al server, questa funzione viene chiamata e i passaggi 2-3 vengono ripetuti.
posta Cbeppe 21.05.2012 - 18:49
fonte

1 risposta

2

Una buona cosa da fare quando si propone un concetto di sicurezza è quello di creare un elenco di scenari , che deve essere protetto. Senza questo quadro, è difficile commentare.

Confrontiamolo con la gestione della sessione:

  1. L'utente accede (o accede al sito)
  2. Viene generato un token casuale chiamato sessionid
  3. Il sessionid (e altre informazioni ad esso collegate) sono memorizzati sul server (in un database, un filesystem o una memoria)
  4. Quando l'utente accede a una pagina, viene chiamata una funzione che controlla l'id della sessione e legge le informazioni associate. Se il sessionid è valido, l'utente resta connesso. In caso contrario, l'utente è disconnesso.

Quindi la differenza principale è il passaggio 5 , in cui generi un nuovo token per la richiesta successiva.

Quindi, se una richiesta viene persa, l'utente verrà disconnesso. Ciò potrebbe aiutare un utente a rilevare che è stato vittima di un CSRF attacco . Tuttavia, la disconnessione molto probabilmente non genera molti sospetti ai normali utenti.

Imponi un ordine rigoroso di richieste . Se due richieste vengono elaborate in parallelo (ad esempio aprendo due schede del browser in un breve lasso di tempo), entrambe invieranno lo stesso cookie. Di conseguenza, una scheda non funzionerà e l'utente verrà disconnesso.

    
risposta data 22.05.2012 - 08:11
fonte

Leggi altre domande sui tag