2011-11-25 16 views
10

Quando si tratta di ricordati di me biscotti, ci sono 2 approcci distinti:Hash o token per i cookie "ricordami"?

hash
Il ricordi di me cookie memorizza una stringa che può identificare l'utente (ad esempio User ID) e una stringa che può dimostrare che l'utente identificato è quello che finge di essere, di solito un hash basato sulla password dell'utente.

Gettoni
Il ricordi di me cookie memorizza un casuale (senza senso), ma stringa univoca che corrisponde con un record in un gettoni tavolo, che memorizza un ID utente.

Quale approccio è più sicuro e quali sono i suoi svantaggi?

+6

L'intuizione suggerisce che le stringhe casuali usa e getta devono essere più sicure delle stringhe deterministiche prodotte da un algoritmo ma suppongo che tu voglia dei riferimenti. E l'intuizione non è sempre giusta comunque. –

+0

Perché questo taggato è Ruby? –

+1

Per chiunque trovi questo, leggi: [Best Practice di cookie persistenti di accesso] (http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/).Fondamentalmente, devi anche hash i token nello stesso modo in cui hai una password. –

risposta

9

Se possibile, utilizzare token generati casualmente. Ovviamente, il rovescio della medaglia è che devi scrivere del codice extra per archiviarli e usarli sul lato server, quindi questo potrebbe non essere garantito per tutte le applicazioni web. Ma dal punto di vista della sicurezza, questo ha vantaggi:

  1. Un utente malintenzionato non può generare i token da ID utente, ma può sicuramente generare hash. Questo è un grosso problema, anche se usi salt quando generi hash (e dovresti), i tuoi utenti sono fregati se il sale finisce nelle mani sbagliate.

  2. L'assegnazione di questi token consente ai propri utenti (o al proprio amministratore se necessario) di "disconnettere" alcune sessioni di cui potrebbero voler sbarazzarsi. Questa è in realtà una caratteristica interessante, ad esempio Google e Facebook la utilizzano.

Quindi, se avete tempo e budget: token, assolutamente.

1

Sì i token sarebbero più sicuri se producono una stringa casuale ogni volta.

D'altra parte, l'intero punto in cui mi ricordo è che l'utente non deve effettuare nuovamente l'accesso, quindi a meno che non facciano clic su Esci raramente sarà necessario ricreare un nuovo token a meno che non scada.

Credo che si dovrebbe attaccare con gettoni e non sacrificare la sicurezza per pigrizia :-p

4

In genere si mantiene il token -> mappatura di utenti protetti sul lato server. Quindi, in ultima analisi, la tua sicurezza si basa su come mantenere il token sicuro e garantire che la sua durata sia controllata (es. Scade e/o è valido solo se ti viene fornito dallo stesso IP utilizzato dal fornitore originale delle credenziali - di nuovo, solo un esempio)

Security of token based authentication

Spero che questo aiuti.

Problemi correlati