2012-06-09 13 views
9

Questo è un ramo di un'altra domanda: What is the best way to implement "remember me" for a website?Resta connesso alle best practice: come fa un nome utente nel cookie a renderlo più sicuro?

La risposta in alto è quello di implementare questa: http://jaspan.com/improved_persistent_login_cookie_best_practice

Una sintesi:

utilizzare un numero casuale come un token di serie, e un altro come un token di accesso. Metti quelli nel cookie Stay Logged, insieme al nome utente. Assegnare un secondo, normale cookie di sessione. Ogni volta che un utente arriva a senza un cookie di sessione, utilizza il cookie Rimani connesso. Emettere un nuovo , questa volta con un nuovo token di accesso casuale, mantenendo lo stesso il token della serie .

Perché includere lo username? Come sta aiutando? Il token di serie dovrebbe essere sufficiente per identificare l'utente e la serie. Il token serie è stato aggiunto in questo approccio per prevenire un attacco DoS in cui un utente malintenzionato indovina tutti i nomi utente e colpisce il sito tutti in una volta, registrando tutti fuori. Ma perché ha senso lasciare il nome utente a tutti?

+2

AFAICT incluso lo username fa due cose. In primo luogo, rende più difficile l'accesso a DoS ricordato con l'invio di token di serie casuali. (Il DoS avrà successo solo se indovinerai un token Series valido e il suo nome utente abbinato.) In secondo luogo, il nome utente difende da collisioni innocenti tra i token serie rilasciati a utenti diversi. Senza il nome utente, una collisione di serie token potrebbe sembrare un'indicazione di furto. Ovviamente, se puoi garantire che ogni nuovo Serie Token è unico tra tutti i Token Series ancora validi in precedenza, questo non è un problema. – ottomeister

+0

Questo ha più senso finora. In un sistema molto distribuito in cui il controllo dell'unicità per i token serie non è performante, capisco perché includi il nome utente o, preferirei, un hash del nome utente. Ma se i token di serie sono unici, potrebbe anche togliere il nome utente dai potenziali attaccanti. –

+0

Non è meglio usare l'ID utente al posto del nome utente a causa delle prestazioni di ricerca di interi e stringhe? – axelbrz

risposta

0

Il nome utente e il numero vengono cercati sul server prima di emettere un nuovo cookie di sessione. Senza il nome utente sarebbe meno sicuro (potrebbe riprodurre usando un utente diverso se hai rubato il numero) e più difficile da cercare.

+3

1) Non è più difficile cercare. Il token serie è un numero univoco, è una ricerca economica. 2) Come può essere riprodotto con un altro utente? Avrebbero un gettone serie diverso.Una volta che il token serie è stato revocato a causa di un attacco fallito, il token serie è utile come un numero casuale. –

0

La mia ipotesi su questo:

Il nome utente è per la verifica. Se si richiede al client di inviarlo insieme al token per l'autenticazione, allora si sa quale utente tenta di essere autenticato. Che ti permette di reagire in modo sano al fatto che il token sia sbagliato.

Se si richiede il token solo durante l'autenticazione, non si sa quale utente effettivamente lo provi e in una corrispondenza è sufficiente concedere l'accesso a qualcuno ma non può eseguire alcuna operazione in caso di errore. Qualcuno può semplicemente provare a seguirli ciecamente.

Con questo in mente, diciamo che accontentiamo di utilizzare sia il nome utente che il token. Ora se il token è sbagliato possiamo rimuovere tutti gli altri token per quell'utente. Ma questo apre il sistema a DOS. L'attaccante può disconnettere chiunque a volontà. Quindi per quella serie è stata aggiunta.

Non deve essere il nome utente, altre informazioni che consentiranno di identificare l'utente funzionerà anche.