Voy a comenzar diciendo que no tengo idea de si existe una buena práctica al respecto, pero seguiré adelante y responderé con dos puntos de vista en mente; La vista de seguridad y la vista de usuario ...
Primero que nada, cuando se realiza una solicitud de contraseña, no se debe eliminar la contraseña. ¿Qué pasa si su usuario de repente recordó su contraseña? Deben poder iniciar sesión sin que la solicitud de reinicio afecte su experiencia. En su lugar, se debe generar una cadena aleatoria generada de forma segura una vez (lote de entropía) y guardarla con el usuario como el último identificador de solicitud de reinicio. También se debe almacenar una marca de tiempo. Luego, el enlace en el que el usuario hace clic en el correo electrónico debe contener ese código de tiempo y su dirección de correo electrónico para poder reiniciarlo. También puede verificar la marca de tiempo que se estableció para ver si la solicitud se realizó dentro de los últimos 15 minutos aproximadamente (solo un ejemplo). El otro punto de esto es que si la persona realmente no lo solicitó, aún debería poder iniciar sesión.
Segundo, la mejor manera de limitar esto es usar algo como reCaptcha. Se volverá molesto para el usuario hacer spam constantemente.
Tercero, no creo que sea necesario enviar más de 2 correos electrónicos dentro de una ventana de tiempo específica.
Creo que el mayor riesgo para la seguridad aquí es que alguien que fuerza tu contraseña olvidada para descubrir la información de inicio de sesión de la cuenta. Ser capaz de detectar que alguien está forzando bruscamente tu página de "Olvidé mi contraseña" sería enorme. Tal vez registre el número de solicitudes de restablecimiento de la cuenta desde una dirección IP específica y observe cuándo ese número es demasiado alto en un período de tiempo determinado y requiere que la persona envíe un correo electrónico a [email protected] para poder restablecer su cuenta. [Querrá jugar con los números aquí porque debe tener en cuenta a las personas que se sientan detrás de los NAT, especialmente a los empleados de grandes corporaciones ... nunca se sabe cuándo todos olvidarán su contraseña el mismo día].