Come memorizzare il token di accesso token / password reset nel database?

4

Ho un codice di accesso che viene inviato agli utenti in modo che possano accedere al sito con un clic. Dai termini di accesso è molto simile all'URL di reimpostazione password, quindi presumo che si applichino le stesse ipotesi.

es. in questa domanda persone suggerire di hash questo tipo di token che suona ragionevole, ma il problema è: se uso bcrypt, come lo memorizzo in modo da poterlo interrogare o garantire l'unicità durante la generazione? Non vedo alcun modo oltre a controllare ogni singolo token nel database.

Significa che bcrypt non può essere usato a tale scopo o mi manca qualcosa?

    
posta Ilya Chernomordik 10.05.2016 - 15:49
fonte

2 risposte

7

Dato che sai che i tuoi token in testo semplice sono unici (o almeno questa è un'inferenza logica) non hai bisogno di sale. L'intenzione di Salt è unicamente quella di fornire hash-unicità nel caso di password identiche, ma dal momento che il tuo spazio di input è destinato ad essere garantito univoco, non hai questo problema.

Inoltre, dal momento che hai il controllo sulla casualità e la dimensione dei testi in chiaro, non devi preoccuparti di cracking delle password più deboli con i metodi tradizionali, quindi bcrypt non è realmente necessario per rallentare il processo. Se il tuo spazio di input è ampio e casuale, puoi semplicemente eseguire l'hash con un hash crittografico strong (ad esempio SHA256) senza sale. Ciò ti consente semplicemente di controllare se H(token) è nel database quando genera un nuovo token (controllo di univocità).

Il processo di convalida di una richiesta di ripristino è quindi piuttosto semplice: prendi l'ID utente e il token in testo normale (come fornito nel link di reset) e verifica che corrispondano nel database calcolando nuovamente H(token) .

In alternativa, se si desidera ancora utilizzare bcrypt, è possibile garantire l'univocità anteponendo il token casuale all'ID utente prima di inserirlo in bcrypt. Questo non richiede di verificare l'unicità (sarà sempre univoco a causa del prefisso ID) e consente comunque di verificare il token bene.

    
risposta data 10.05.2016 - 15:57
fonte
3

Puoi usare bCrypt. La semplice soluzione è inviare al tuo utente un ID e il token:

https://example.com/pwdReset?resetId=123&resetKey=[your long randomly generated key]

Puoi cercare l'hash usando l'id (proprio come useresti il nome utente per cercare l'hash della password dell'utente).

    
risposta data 10.05.2016 - 15:57
fonte

Leggi altre domande sui tag