Domanda

Qualsiasi migliore pratica su come dovrebbe essere costruito un token della password di reset?Sto pensando:

Casuale 17 caratteri [A-ZA-Z0-9] + un ID globalmente univoco + Casuale 17 caratteri [A-ZA-Z0-9].

C'è una soluzione migliore o uno standard di settore sui token di reset password?

È stato utile?

Soluzione

Ci sono alcuni punti importanti da considerare.

    .
  1. Il codice dovrebbe essere davvero casuale (leggi da mcrypt_dev_urandom) e non dovrebbe essere dererivato da altre informazioni relative all'utente.
  2. Idealmente il codice è BASE62 codificato (A-Z A-Z 0-9) per evitare problemi con l'URL.
  3. Store Store Un hash del token nel database , altrimenti un utente malintenzionato con accesso a lettura al database può ripristinare qualsiasi account.
  4. Questo porta al problema che devi trovare l'hash del token nel database, dopo che l'utente ha fatto clic sul collegamento. Ci sono due modi possibili per memorizzare il token:

      .
    • Hai il token con un algoritmo hash come SHA512 senza sale. Questo è sicuro se il token è molto forte (lunghezza minima 20 con 0-9 A-Z A-Z). Teoricamente devi verificare se un tale hash esiste già prima di inserirlo nel database, in pratica questo è trascurabile. Ho implementato un Classe di reset della password che può gestire tali token.
    • Hai il token con bcrypt e sale. Ciò consente ai token più brevi, ma non è possibile cercare il token hashed nel database. Invece devi includere un ID di fila nel link per trovare il token.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top