Comencé a registrar intentos de inicio de sesión fallidos en mi sitio web con un mensaje como
Failed login attempt by qntmfred
He notado que algunos de estos registros se ven como
Failed login attempt by qntmfredmypassword
Supongo que algunas personas tuvieron un inicio de sesión fallido porque escribieron su nombre de usuario y su contraseña en el campo de nombre de usuario. Las contraseñas se cifran en la base de datos, pero si la base de datos se vio comprometida, estos mensajes de registro podrían ser una forma para que un atacante descubra las contraseñas para cualquier pequeño porcentaje de personas que terminen con un inicio de sesión fallido como este.
¿Hay una mejor manera de manejar esto? ¿Debería preocuparme incluso por esta posibilidad?
fuente
Respuestas:
Pruébalo así:
Si el nombre de usuario existe, registre "intento fallido de inicio de sesión por
username
". De lo contrario, registre "intento fallido de inicio de sesión por IP123.45.67.89
". Eso debería solucionar el problema de que las contraseñas aparezcan en el registro accidentalmente.fuente
¿Por qué no simplemente verificar si dicho nombre de usuario existe en la base de datos? Esto te dejará con 2 posibles resultados.
El usuario ingresó un nombre de usuario correcto. Entonces puede simplemente registrar lo que registra ahora.
El usuario ingresó su contraseña en el campo de nombre de usuario, por lo tanto, el nombre de usuario no es válido. Simplemente ingrese una entrada de registro que indique que hubo un intento fallido de inicio de sesión por parte de un usuario no identificado.
Y, por supuesto, puede tener un campo adicional para registrar ip, fecha y qué no.
fuente
Consideraciones:
¿Puedes detectar cuándo ha ocurrido esto, en lugar de que alguien escriba mal su nombre de usuario? El registro de nombres de usuario mal escritos puede ser útil para fines de soporte, es decir, responder a la pregunta "¿por qué no puedo iniciar sesión?" Con la respuesta "Usted ha escrito mal su nombre de usuario, eso debería ser un guión, no un punto" o "Tiene dos puntos iniciales luego espacio en blanco: ¿lo has cortado y pegado? Si tiene una pequeña cantidad de usuarios que pagan un alto valor (es decir, no es otro sitio de redes sociales), entonces probablemente tendrá que proporcionar este tipo de soporte.
¿Cuál es la acción apropiada si alguien hace esto? Los nombres de usuario pueden ser indicadores de intentos de piratería. El hecho de que el nombre de usuario no aparezca en su lista no significa que no necesite saber de qué se trataba. Sin embargo, si cree que esto es un problema grave y puede detectar de quién es la contraseña, puede solicitar al usuario que cambie su contraseña después de que esto haya ocurrido.
¿Qué es la práctica de la industria? La práctica de la industria es registrar el campo de nombre de usuario pero no el campo de contraseña. Es poco probable que te despidan por hacer esto.
A menos que tenga consideraciones fuera de lo común, sugeriría seguir la práctica de la industria y registrar el campo de nombre de usuario, independientemente. Considere los cambios forzados de contraseña como sugerencia 2 si cree que esto es inadecuado.
fuente
Solo para estar seguro, el inicio de sesión 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 algunos datos, pero tengo sus direcciones IP, y prefiero no arriesgarme a obtener algo tan sensible en texto sin formato.Si realmente desea registrar este tipo de cosas, le sugiero que cuando registre un intento de inicio de sesión, verifique la base de datos de los usuarios con un nombre que coincida con lo que tiene en el campo de nombre de usuario, y solo almacénelo si tiene una coincidencia. De lo contrario, simplemente lo almacena como "usuario desconocido". Puede ser sofisticado, verificando si este valor contiene eso o lo que sea, pero siempre existe el riesgo de que obtenga combinaciones como [Usuario] [Contraseña] y [UserPas] [espada], en cuyo caso puede verificar la IP y deducir que inadvertidamente almacenó el inicio de la contraseña de alguien en claro. Puede extender esto al [Usuario] [Contraseña] y [Contraseña de usuario] [??] poco probable pero posible, en cuyo caso puede ver "inicio de sesión fallido por contraseña de usuario" seguido de "Inicio de sesión exitoso por usuario" y deducir todode la contraseña del usuario. En general, para estar seguro, diría que no registre 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 publican para registrar el nombre de usuario para intentos fallidos de inicio de sesión son, en mi opinión, mejor manejados a través de otros métodos.
Por ejemplo, se dice que cuando un cliente pregunta "¿por qué no puedo iniciar sesión?", Los nombres de usuario registrados le permitirán señalar errores tipográficos. Esto es cierto, pero no vale la pena correr el riesgo de atrapar también contraseñas; Para ello, redirigiría al usuario de nuevo al formulario de inicio de sesión en caso de error, resaltando el campo de nombre de usuario y repoblando con lo que escribieron para que puedan ver 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. Lo haría al tener una columna "BadLogins" en la tabla Usuarios, que se incrementa cada vez que un inicio de sesión falla 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 de inicio de sesión fallidos desde su último inicio de sesión "y aconsejarles sobre qué hacer si no creen que los intentos fueron de ellos. Si desea ser realmente minucioso, 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.
fuente