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?
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
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. –
Non è meglio usare l'ID utente al posto del nome utente a causa delle prestazioni di ricerca di interi e stringhe? – axelbrz