Estoy de acuerdo con @schroeder en que los correos electrónicos de restablecimiento de contraseñas son una de las áreas donde tiende a ser más aceptable instruir a los usuarios para que hagan clic en los enlaces. Después de todo, el usuario fue el que activó el restablecimiento de la contraseña y debería estar esperando un correo electrónico. Puede agregar texto en el correo electrónico que dice "Este correo electrónico se envió debido a su solicitud. Si no solicitó un restablecimiento de contraseña, no haga clic en este enlace. Normalmente, no debe hacer clic en ningún enlace de un correo electrónico inesperado, incluso si aparece para ser legítimo ".
La razón por la que te animo a que reconsideres esto es porque tu alternativa (usar un PIN) va a ser más complicada para los usuarios y probablemente te cause más dolores de cabeza. Dejando de lado la complejidad del PIN, tendrá que informar a los usuarios sobre qué hacer, y estas instrucciones requerirán que les diga dónde están en su sitio para ingresar el código. Mientras dice "Ir a la página de inicio de nuestro sitio, haga clic en Olvidé mi contraseña y haga clic en Ingresar para restablecer el PIN" no es un problema, aún así los usuarios se quejarán de que no pueden encontrar los botones o se confunden de lo que deben hacer. Tenerlos simplemente haciendo clic en un enlace elimina gran parte de esta confusión.
Con respecto a la complejidad del PIN, debería poder hacer algunas cosas para contrarrestar el "espacio de teclas" reducido de un PIN aleatorio de 6 dígitos en comparación con su hash. Puede agregar letras y algunos símbolos para aumentar el número de combinaciones posibles. Puede solicitar al usuario no solo su PIN de restablecimiento, sino también su dirección de correo electrónico (lo que requiere que un atacante adivine algo más que un PIN válido). También puede agregar un CAPTCHA u otra verificación de "vida" para dificultar las adivinanzas automatizadas en la entrada de PIN. Finalmente, puede monitorear los intentos de restablecimiento de PIN y bloquear las direcciones IP (o retrasarlas) que envían una gran cantidad de conjeturas.
Al igual que con una función de restablecimiento de contraseña basada en enlaces, estos PIN solo deben ser válidos para un solo uso y deben caducar dentro de los 30 a 60 minutos, independientemente de si se usan o no.
Al tomar pasos como estos, puede eliminar las amenazas más probables contra un sistema de restablecimiento de contraseña basado en PIN.