Para estar seguro, el registro en mi aplicación actual no almacena los parámetros pasados a los métodos de inicio de sesión o restablecimiento de contraseña. La llamada de registro tiene un parámetro opcional que controla esto, que, cuando se establece en verdadero, reemplaza el objeto de parámetros almacenados con [Redacted]
. Claro, así que pierdo un poco de información, pero tengo sus direcciones IP, y prefiero no arriesgarme a obtener algo tan sensible en texto plano.
Si realmente desea registrar este tipo de cosas, sugeriría que al registrar un intento de inicio de sesión, verifique en la base de datos en busca de usuarios con un nombre que coincida con lo que tiene en el campo de nombre de usuario, y solo lo almacene si tiene un partido. De lo contrario, simplemente lo almacena como "usuario desconocido". Podría ser elegante, verificando si este valor contiene eso o lo que sea, pero siempre existe el riesgo de que obtenga combinaciones como [Usuario] [Contraseña] y [UsuarioPas] [espada], en cuyo caso puede verificar la IP y deducir eso inadvertidamente ha almacenado el inicio de la contraseña de alguien en el claro. Puede extender esto a la improbable pero posible [User] [Password] y [UserPassword] [??], en cuyo caso puede ver "login incorrecto por UserPassword" seguido de "Login exitoso por User" y deducir all de la contraseña del usuario. En general, para estar seguro, diría que no registrar nombres de usuario a menos que el inicio de sesión sea exitoso.
Editar para agregar:
La mayoría de los argumentos que las personas están publicando para registrar el nombre de usuario para los intentos fallidos de inicio de sesión son, en mi opinión, mejor manejados a través de otros métodos.
Por ejemplo, se ha dicho que cuando un cliente pregunta "¿por qué no puedo iniciar sesión?", los nombres de usuario registrados le permiten señalar errores tipográficos. Esto es cierto, pero no vale la pena el riesgo de capturar contraseñas; Lo haría redirigiendo al usuario de nuevo al formulario de inicio de sesión en caso de error, resaltando el campo de nombre de usuario y volviéndolo a llenar con lo que escribieron para que puedan verlo por sí mismos.
Otro argumento fue que te permite identificar intentos de piratería; Una serie de fallas contra un nombre de usuario puede ser un intento de forzar una contraseña. Haría esto teniendo una columna "BadLogins" en la tabla de Usuarios, que se incrementa cada vez que falla un inicio de sesión con un nombre de usuario que coincide con este usuario, y se restablece a cero en un inicio de sesión exitoso, después de decirle al usuario "ha habido x intentos fallidos de inicio de sesión desde su último inicio de sesión "y aconsejarles sobre qué hacer si creen que no fueron intentos de ellos. Si desea ser realmente exhaustivo, podría tener otra columna que almacene el último valor de la columna BadLogins incluso después del inicio de sesión exitoso, y / o una columna que almacene el valor más alto de esta columna, y / o una columna que almacena el número total de inicios de sesión fallidos que ha tenido esta cuenta.