Estoy implementando una aplicación web con un flujo de restablecimiento de contraseña. Esto es lo que he hecho para intentar que sea seguro.
- Introduzca la dirección de correo electrónico en el formulario de contraseña olvidada.
- Independientemente de si el cliente existe, la aplicación informa de un correo electrónico enviado, esto evita revelar la existencia de una dirección de correo electrónico.
- Genero una cadena aleatoria segura, luego la cifro y la uso como un token de acceso con una validez de 1 día.
- El cliente vuelve a hacer clic en el enlace que contiene un parámetro de token, reviso la tabla de clientes y les permito ingresar al formulario de restablecimiento de contraseña si el token es válido.
- En esa forma, puse el valor del token, no el ID del cliente que se está restableciendo, lo que evita exponer el ID.
La primera pregunta es: ¿es esto lo suficientemente seguro?
Pero mi pregunta principal está relacionada con la hibernación y los parámetros: mi consulta es como "Seleccione c del cliente donde c.token =? 1 y c.activeDate > DATe_NOW". Paso en el valor del parámetro token en bruto.
En JPA / Hibernate o JPQL, ¿existe algún riesgo de un ataque de inyección al modificar el parámetro del token cuando estoy usando parámetros posicionales como este en la consulta?