Pregunta

¿Cualquier mejor práctica sobre cómo se debe construir un token de contraseña de reinicio?Estoy pensando:

Aleatorio 17 caracteres [A-ZA-Z0-9] + A globalmente ID únicos + aleatorio 17 caracteres [A-ZA-Z0-9].

¿Hay una solución mejor, o un estándar de la industria en los tokens de restablecimiento de contraseña?

¿Fue útil?

Solución

Hay algunos puntos importantes a considerar.

  1. El código debe ser realmente aleatorio (leído de McRypt_DEV_URANDOM), y no debe abandonarse de la información relacionada con otros usuarios.
  2. idealmente El código es codificado BASE62 (A-Z A-Z 0-9) para evitar problemas con la URL.
  3. tienda solamente Un hash del token en la base de datos , de lo contrario, un atacante con acceso de lectura a la base de datos puede restablecer cualquier cuenta.
  4. Esto lleva al problema que tiene que encontrar el hash del token en la base de datos, después de que el usuario haga clic en el enlace. Hay dos formas posibles de almacenar el token:

    • hash el token con un algoritmo hash como SHA512 sin una sal. Esto es seguro si el token es muy fuerte (longitud mínima 20 con 0-9 A-Z A-Z). Teóricamente, debe verificar si un hash de este tipo ya existe, antes de ingresarlo en la base de datos, en la práctica, esto es insignificante. Implementé una clase de reinicio de contraseña que puede manejar tales fichas.
    • hash el token con bcrypt y sal. Esto permite que los tokens más cortos, pero no puede buscar el token hashed en la base de datos. En su lugar, debe incluir una fila de identificación en el enlace para encontrar el token.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top