Ho qualche difficoltà a farlo nel modo giusto (per quanto possa andare) .
Qualche tempo fa, ho chiesto un domanda qui , chiedendo aiuto su come implementare l'invio di un collegamento di accesso tramite e-mail.
Prima di tutto, so che questo è terribilmente insicuro fin dall'inizio, ma abbiamo le nostre ragioni quindi lasciamo perdere questo.
L'idea
L'idea è fondamentalmente l'invio di un'e-mail con un link di lunga durata che dà accesso a un'area molto specifica della nostra app.
Esempio di collegamento: ourwebsite.com/users/ACCESS-KEY
L'attacco che voglio evitare
Un utente che indovina un'altra chiave di accesso usando la propria.
Cosa mi è stato suggerito
Nella mia precedente domanda, mi è stato suggerito di utilizzare una stringa casuale come chiave di accesso che verrà salvata nel mio database.
Ho fatto un po 'di ricerche, e sono preoccupato che il mio PRNG non sia abbastanza casuale, specialmente dal momento che sto generando un sacco di chiavi di accesso alla volta.
Sono stato traumatizzato dalle lezioni di C # a scuola, dove la mia funzione "casuale" avrebbe cambiato l'output ogni 1000 o più iterazioni.
Sto pensando di usare Random.org per avere un seme veramente casuale, ma sembra un po 'eccessivo.
I miei pensieri
Ho 4 opzioni che voglio controllare con voi ragazzi prima di soccombere a Random.org -
- Basta usare il PRNG, verificando in anticipo come si comporta (PRNG di Node.js), magari implementando un
sleep(500)
tra generazioni. Se il risultato è simile ma non identico, cancellalo con SHA-2. - Prendendo l'ID utente e taggandolo accuratamente con PBKDF2 (ha importanza?), salvalo in DB e invialo.
- Utilizzo di un PRNG implementato come Mersenee Twister, come suggerito in questa domanda stackoverflow .
- Altre cose di cui non so nulla come un codice che so solo come decifrare, o JWT come sto usando per i miei utenti abituali.
Cosa ne pensi?
Grazie per qualsiasi aiuto!
Apprezzo il tempo per leggere questo.