passwords - this password reset token is invalid traductor
Mejores prácticas para generar tokens de restablecimiento de contraseña (1)
¿Alguna práctica recomendada sobre cómo se debe construir un token de restablecimiento de contraseña? Estoy pensando:
17 caracteres aleatorios [a-zA-Z0-9] + una identificación global única + 17 caracteres aleatorios [a-zA-Z0-9].
¿Existe una mejor solución o un estándar de la industria para restablecer los tokens de contraseña?
Hay algunos puntos importantes a considerar.
- El código debe ser realmente aleatorio (leído desde MCRYPT_DEV_URANDOM) y no debe derivarse de otra información relacionada con el usuario.
- Idealmente, el código está codificado en base62 (AZ az 0-9) para evitar problemas con la URL.
- Almacene solo 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.
Esto lleva al problema de que tiene que encontrar el hash del token en la base de datos, después de que el usuario haya hecho clic en el enlace. Hay dos formas posibles de almacenar el token:
- Hash el token con un algoritmo de hash como SHA512 sin un salt. Esto es seguro si el token es muy fuerte (longitud mínima 20 con 0-9 az AZ). Teóricamente, tiene que comprobar si dicho hash ya existe antes de ingresarlo en la base de datos, en la práctica esto es insignificante. Implementé una clase de restablecimiento de contraseña que puede manejar dichos tokens.
- Hash el token con BCrypt y sal. Esto permite tokens más cortos, pero no puede buscar el token hash en la base de datos. En su lugar, debe incluir un ID de fila en el enlace para encontrar el token.