Los intentos de inicio de sesión fallidos exponen contraseñas

38

Comencé a registrar intentos fallidos de inicio de sesión en mi sitio web con un mensaje como

Failed login attempt by qntmfred

Me he dado cuenta de que algunos de estos registros se parecen a

Failed login attempt by qntmfredmypassword

Supongo que algunas personas tuvieron un inicio de sesión fallido porque ingresaron su nombre de usuario y su contraseña en el campo de nombre de usuario. Las contraseñas se encuentran en la base de datos, pero si el db se ve comprometido, estos mensajes de registro podrían ser una forma de que un atacante descubra las contraseñas de cualquier pequeño porcentaje de personas que tengan un inicio de sesión fallido como este.

¿Hay una mejor manera de manejar esto? ¿Debería siquiera preocuparme por esta posibilidad?

    
pregunta kenwarner 22.04.2013 - 05:49

4 respuestas

65

Inténtalo así:

Si existe el nombre de usuario, registre "intento de inicio de sesión fallido por username ". De lo contrario, registre "intento fallido de inicio de sesión por IP 123.45.67.89 " en su lugar. Eso debería solucionar el problema de que las contraseñas aparezcan en el registro accidentalmente.

    
respondido por el Mason Wheeler 22.04.2013 - 05:55
12

¿Por qué no verificar simplemente si tal nombre de usuario existe en la base de datos? Esto te dejará con 2 resultados posibles.

  1. El usuario ingresó un nombre de usuario correcto. A continuación, simplemente puede registrar lo que registra ahora.

  2. 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 inicio de sesión fallido en un intento por parte de un usuario no identificado.

Y, por supuesto, puede tener un campo adicional para registrar ip, fecha y qué no?

    
respondido por el galdikas 22.04.2013 - 11:29
1

Consideraciones:

  1. ¿Puede detectar cuándo ha ocurrido esto, a diferencia de alguien que escribe 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? en "con la respuesta" Ha escrito mal su nombre de usuario, debe ser un guión y no un punto ", o" Tiene dos puntos iniciales y luego espacios en blanco: ¿lo ha cortado y pegado? ". Si tiene un pequeño número de usuarios que pagan con un alto valor (es decir, no otro sitio de redes sociales), probablemente tendrá que proporcionar este tipo de soporte.

  2. ¿Cuál es la acción adecuada si alguien debe hacer 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 qué era. Sin embargo, si cree que esto es un problema grave y podría detectar de quién era la contraseña, podría pedirle al usuario que cambie su contraseña después de que esto haya ocurrido.

  3. ¿Qué es la práctica de la industria? La práctica de la industria es registrar el campo del nombre de usuario pero no el campo de la 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.

    
respondido por el Ben 22.04.2013 - 11:51
1

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.

    
respondido por el anaximander 22.04.2013 - 14:43

Lea otras preguntas en las etiquetas

Comentarios Recientes

a la mayoría de los sitios web típicos, y por razones obvias quieren restringir el acceso al archivo de cadena de bytes solo para usuarios autenticados autorizados. Tenga cuidado al comprar contraseñas que restrinjan el acceso a sitios web como Bitstamp y Kuikorboss. Preste especial atención a su fuente y trate siempre a su usuario como si fuera un contador corporativo. <| Endoftext |> El sonido de la música cristalina abre el anochecer de la infancia: ese primer guiño de los ojos brilla con un fuego misterioso.... Lee mas