Generar el hash no sería un gran problema ya que rand () no es lo suficientemente aleatorio.
Para el generador de claves aleatorias, si está en linux / unix, puede obtener los valores de / dev / urandom en lugar de rand (), lo que sería lo suficientemente bueno para su caso de uso.
Y sí, al enviar un hash válido que consiga una cuenta validada, podrá deducir su dirección de correo electrónico (en ese momento, su aplicación probablemente mostrará la dirección de correo electrónico o el nombre de usuario del usuario en la página de validación que de alguna manera haría lo mismo).
Sin embargo, a pesar de que los correos electrónicos se pueden recuperar de esta manera, diría que no es un problema, ya que puede deducirlo también a través de la página de inicio de sesión o la página de contraseña olvidada si su aplicación no satisface tales condiciones Otro punto sería que, una vez que el usuario haya sido validado, el enlace de validación debe eliminarse de su base de datos para que el atacante ya no pueda deducir el correo electrónico de esa cuenta de correo electrónico. Por lo tanto, las cuentas de correo electrónico que podrían deducirse serían las que no están activas (ya que la cuenta aún no está validada) o cuentas nuevas. Y aún así, no tiene mucho impacto, ya que ganar la dirección de correo electrónico solo no le hará mucho.
Un poco fuera de lugar, pero siento la necesidad de decir esto ya que está algo relacionado.
Aparte de eso, conseguir que los atacantes validen la cuenta de su usuario o obtener la dirección de correo electrónico del usuario no es un gran problema, sin embargo, si permite que el usuario inicie sesión directamente después de validar su cuenta, entonces el atacante podría acceder a la cuenta del usuario que es mala (lo cual también es algo común, desafortunadamente).
Por lo tanto, la forma correcta sería validar solo la cuenta del usuario tras la activación y no permitir que el usuario inicie sesión directamente en su cuenta.