Le resultará difícil decidir cuál de los dos valores almacenados se usará como la contraseña deseada del usuario (la que está en el almacenamiento local o la que está en el campo de entrada), si ninguno de ellos está vacío, pero para algunos razón difiere.
Esto potencialmente puede proporcionar un vector de ataque de ingeniería social, donde el atacante prepara una trampa abriendo el formulario de registro, llenando el almacenamiento local / de sesión usando su propio código y luego eliminando cualquier rastro (notificaciones de error de entrada) con un editor de DOM, o ingresando la contraseña deseada directamente en el almacenamiento local / de sesión (ambos son compatibles con algunos navegadores y es extremadamente fácil de hacer), y luego le pide a la víctima que se registre en su sitio web y, bueno, la use. Ya que su código puede ser fácilmente inspeccionado / probado para ver cómo maneja estos casos, el atacante podría hacer esto de manera ligeramente diferente a lo que describí (incluso las inyecciones de scripts directamente en el almacenamiento local / de sesión no están fuera de la cuestión, si luego procesa ese valor localmente en el formulario POST), pero con el mismo efecto.
La víctima no sospechará nada hasta que cierre la sesión e intente volver a iniciarla. Dependiendo de la persistencia de la sesión del usuario, este proceso de cierre de sesión e inicio de sesión podría no ser necesario, y la víctima no lo haría. noté que su contraseña no era la que ingresó en el campo de la contraseña, sino que la contraseña elegida por el atacante se usó para crear su nueva cuenta.
En pocas palabras, el atacante acaba de acceder a la cuenta recién creada de la víctima y a todos los datos que ingresó, incluso si la víctima era cautelosa y se aseguró de que no se trataba de navegar por los hombros.
Por lo tanto, lo importante es que posiblemente tenga que lidiar con dos ubicaciones diferentes del mismo sistema de datos, que podrían diferir por cualquier motivo, y decidir cuál usar de una manera que sea segura para su sistema. así como el usuario final que se está registrando. Esto puede resultar bastante difícil de hacer correctamente, por lo que aconsejaría no hacerlo.
En lugar de eso, asegúrate de que tu formulario de registro se sirva a través de HTTPS, y luego simplemente rellena el campo de contraseña, ya que se ingresó por última vez en la solicitud POST del usuario y si cumple con tus restricciones, incluso si algunos de los otros campos de entrada son Rellenado incorrectamente y el formulario debe ser enviado de nuevo.