¿Cómo probar que el sistema de autenticación funciona y que el cliente está usando la contraseña incorrecta?

71

Ocasionalmente (aunque rara vez), algunos de nuestros usuarios dicen que su contraseña no funciona: dicen que han escrito la contraseña correcta pero recibieron el mensaje 'contraseña incorrecta' .

Les decimos que usen la función restablecer contraseña , lo que hacen, pero se mantienen con la sensación de que el sistema de autenticación a veces no funciona .

Nuestra suposición es que su contraseña no es lo que recuerdan, pero como no la almacenamos en texto sin formato, ¿tenemos alguna forma de demostrar que ese es el caso?

En algunas ocasiones, pudimos mostrarles que en una fecha determinada cambiaron su contraseña y luego se olvidaron de ella y quedaron satisfechos. Pero ese no es siempre el caso.

    
pregunta Mario Trucco 09.11.2016 - 16:17
fuente

9 respuestas

84

No hay una manera realmente rápida de demostrar esto porque el hash está diseñado para no ser reversible .

Puede tomar su contraseña reclamada y generar manualmente el hash como sugirió @ TechTreeDev . Debería usar un hachís salado (es decir, BCrypt), así que asegúrese de usar la misma sal.

  • Si el hash generado manualmente coincide, entonces se demostró un problema en el código de inicio de sesión.

  • Es probable que el hash generado sea diferente, entonces ha descartado los problemas con el código de inicio de sesión , pero todavía podría haber un problema con la configuración de la contraseña , o un error en su generación manual.

Eso es más o menos lo que puede hacer para verificar la contraseña de una sola persona. Más allá de eso, entramos en las pruebas del sistema.

  • Si sospechas de un caso de borde de oportunidad intermitente / aleatorio, puedes crear un script de prueba de mono para configurar las contraseñas y luego probarlas. Aunque este enfoque es probablemente excesivo.

  • Lo mejor es revisar su código de inicio de sesión y todos los puntos que restablecen la contraseña . El código debe ser lo más corto y conciso posible. En mi experiencia, la mejor manera de descartar problemas de casos de borde es con la revisión del código, ya que estos casos de borde no suelen estar cubiertos por pruebas manuales.

Algunas cosas para buscar específicamente:

  • Asegúrese de que la configuración de maxlength sea consistente (o mejor aún, no esté presente) en cualquier contraseña <input> s. Busca coherencia entre la configuración de la contraseña y el formulario de inicio de sesión.

  • Asegúrese de que no haya un funcionamiento .

  • Asegúrese de que la codificación sea consistente. Si se utiliza un carácter no ASCII en la contraseña, el formulario de configuración de la contraseña y los formularios de inicio de sesión deben comportarse exactamente igual.

  • Tampoco elimines automáticamente los caracteres espacio en blanco o no ASCII de la contraseña. Este es el tipo de cosas que puede capturar fácilmente con una revisión de código si su código es conciso.

Finalmente algunos consejos humanos:

  • Verifique que estén usando el nombre de usuario correcto primero.

  • Comprueba que la configuración de bloqueo de mayúsculas sea correcta.

  • Proporcione a las personas de soporte al cliente un registro de cada fecha / hora de inicio de sesión o de restablecimiento de contraseña. Si ha habido al menos un inicio de sesión desde el último restablecimiento, entonces ellos saben que el sistema funcionó correctamente.

    Mientras el código de inicio de sesión no se modifique, y el hash no se haya modificado desde el último éxito, puede estar razonablemente seguro de que el problema debe ser una contraseña mal escrita.

  • Revise el UX del error de contraseña incorrecta , brindándole al usuario algunos consejos simples y una explicación autoritaria de las posibilidades. Esto puede reducir las llamadas al servicio al cliente.

  • Puede ser útil notificar por correo electrónico al cliente cuando se restablece una contraseña para recordárselo. (u otro miembro de la familia en caso de cuentas compartidas)

respondido por el George Bailey 09.11.2016 - 17:14
fuente
25

Hay una forma de saberlo con certeza, y es calcular el hash de lo que ingresó el usuario, usar el mismo Salt y comparar eso con lo que tienes. Sin embargo, eso es lo que hace el proceso de inicio de sesión y el usuario no lo cree. ¿Por qué deberían creerlo cuando lo haces por ellos?

En cambio, podrías hacer lo que he estado viendo últimamente, en Windows 10 por ejemplo, pero también en sitios web:

Proporcione al usuario una manera de verificar lo que ingresó.

Por supuesto, al iniciar sesión, los caracteres deben representarse como puntos u otros caracteres, por lo que los fisgones no pueden ver la contraseña mirando por encima del hombro del usuario.

Pero mientras esté en el campo de entrada, no se ha cifrado ni hash de ninguna manera todavía. Así que proporcione un botón que convierta esos puntos en los caracteres reales.
De esa manera, después de ingresar la contraseña incorrecta, pueden ingresarla nuevamente y ver lo que acaban de ingresar. O pueden verificar antes de iniciar sesión.

Bloqueos de mayúsculas olvidados, turnos colgantes, errores tipográficos; todos pueden ser detectados por el usuario de esta manera.

    
respondido por el SQB 09.11.2016 - 23:03
fuente
6

Para mejorar su experiencia de usuario, primero debe agregar una interfaz de usuario para informar a los usuarios de las siguientes condiciones:

  • Bloqueo de mayúsculas activado
  • Advertencia si hay espacios en blanco finales en el nombre de usuario
  • Advertencia si hay espacios en blanco finales en la contraseña
  • evitar el uso de espacios en blanco en el correo electrónico (si usa el correo electrónico en lugar del nombre de usuario)
  • evitar el uso y eliminar automáticamente las nuevas líneas (hay varias variantes de línea nuevas)
  • evita el uso y elimina automáticamente los caracteres de control
  • Si está usando Javascript, algunos navegadores lo tienen desactivado, por lo que tiene que mover estos pasos en el lado del servidor.

También cuando la contraseña insertada es incorrecta, muestra el siguiente mensaje:

  

La contraseña o el nombre de usuario / correo electrónico son incorrectos, escriba , prestando atención a las letras minúsculas o mayúsculas y todos los números de símbolos, deben coincidir con perfectamente . Evite copiar y pegar, ya que a veces copiar texto puede agregar espacios en blanco y / o nuevas líneas no deseados.

¡Ten en cuenta que tus usuarios pueden tener razón ! Una vez tuve un teléfono antiguo que no me permitía iniciar sesión en una página web, no sé si fue un problema de codificación de texto pero mi contraseña era alfanumérica y funcionaba perfectamente en una PC.

    
respondido por el GameDeveloper 10.11.2016 - 10:48
fuente
3

La respuesta aceptada realmente cubre la mayor parte. Pero asumiendo que intenté todas las sugerencias allí y aún no pude encontrar el problema, intentaría detectar el error cuando sucediera. Para hacerlo, puede agregar el código que registró la contraseña de texto sin formato recibida si un usuario no pudo iniciar sesión dos veces seguidas (para filtrar a todos los usuarios que cometieron un error estúpido y lo corrigieron en el segundo intento).

Para no debilitar la seguridad de su sistema, solo puede habilitar el registro de contraseñas cuando en realidad hubo un usuario en el teléfono que tuvo problemas para iniciar sesión y registrar solo su contraseña con su consentimiento.

Registrar la contraseña real que ve tu aplicación tiene la ventaja de que ves exactamente lo que ve tu aplicación. Después de unas pocas llamadas de usuarios desesperados, puede comenzar a recoger un patrón en sus contraseñas (por ejemplo, espacio al final, caracteres especiales, etc.) que señalaban un problema en su código de inicio de sesión, o podría ver que significaba para escribir "mysweetheart" pero tecló "myseetheart" en su lugar, lo que significaría que los problemas de inicio de sesión probablemente fueron todos errores del usuario.

    
respondido por el Pascal 09.11.2016 - 23:24
fuente
1

No creo que la solución sea realizar los pasos de hash de contraseña manualmente. Si hubiera detectado que realmente falla, seguro, puede hacerlo en el bajo nivel para depurar, pero sus clientes lo olvidarán casi de inmediato.

Aquí el problema es que están usando una contraseña incorrecta, ya sea porque la escribieron mal o porque realmente creen que usaron una diferente a la que usaron.

Para descartar el primer caso, haga que escriban la contraseña deseada en un editor de texto (por ejemplo, un bloc de notas), córtela en el portapapeles y péguela en el campo de contraseña. La contraseña se muestra al cliente durante el proceso, por lo que elimina los casos en los que se presiona una letra incorrecta, se activó el bloqueo de mayúsculas ... (por supuesto, esperamos que lo hagan en un momento en que nadie más esté mirando su pantalla) )

El segundo caso es más difícil, ya que no queremos alentar a los clientes a mantener un archivo de texto con sus contraseñas. Lo ideal sería convencer a sus clientes para que utilicen un administrador de contraseñas como KeePass. Luego, si la contraseña, la misma que funcionaba antes, se copia correctamente desde el administrador de contraseñas, puede estar completamente seguro de que es la contraseña correcta.

Aparte de eso, lo que realmente requiere un cambio de mentalidad de sus clientes, puede pedir a sus clientes que:

  • crear una nueva contraseña
  • cambia su contraseña a eso pegándola
  • intente iniciar sesión con la misma contraseña que tienen en el portapapeles

tantas veces como quieran, para intentar reproducirlo.

    
respondido por el Ángel 09.11.2016 - 18:28
fuente
1

Suponiendo que se está registrando cada vez que un usuario inicia sesión, es posible que pueda demostrar que ha podido iniciar sesión desde que cambió su contraseña por última vez, al menos eso sería suficiente para descartar algunos problemas potenciales.

    
respondido por el Nick 09.11.2016 - 23:17
fuente
1

Al encontrar cuatro sistemas de autenticación diferentes con esta propiedad real, es bastante fácil de verificar en cada caso.

Caso # 1: El sistema falla aleatoriamente. En caso de error, el contador de inicio de sesión incorrecto no se incrementa. (No he podido inspeccionar el interior, pero estoy bastante seguro de que lo que sucede es que a veces pierde la conexión con otro servidor y solo informa una contraseña incorrecta cuando esto sucede).

Caso # 2: El sistema estalló cuando puse un apóstrofe en mi contraseña. Demostrar que el campo de la contraseña estaba sujeto a la inyección de SQL fue trivial.

Caso # 3: la contraseña válida fue rechazada por un filtro de caracteres en la pantalla de inicio de sesión que la pantalla de contraseña no tenía. Esto también fue trivial para demostrar el problema.

Caso # 4: El sistema no me permitió iniciar sesión porque se interpretó al inicio de la sesión como línea de corte. Booo. El inicio de sesión mediante telnet al puerto FTP demostró que tenía la contraseña correcta.

    
respondido por el Joshua 12.11.2016 - 18:30
fuente
0

Podrías almacenar las últimas contraseñas (hash) de cada usuario en tu base de datos. Si la contraseña ingresada no coincide con la contraseña actual, compárela con la (s) anterior (es). Si hay una coincidencia allí, presente un mensaje de "Ha ingresado una contraseña antigua - intente nuevamente" o un código de error a tal efecto (de modo que cuando se pongan en contacto con usted, puede preguntar "¿Ve el Código de error 47? Eso significa que tiene utiliza una contraseña antigua. ")

De esta manera, puede estar bastante seguro de que el sistema de inicio de sesión funciona, ya que ha realizado al menos algunas búsquedas de contraseñas y el usuario recibe información de que ha olvidado su nueva contraseña.

    
respondido por el b04ty 10.11.2016 - 16:42
fuente
0

Estoy publicando una segunda respuesta que pensé ayer, pero no estaba seguro de que fuera recomendable.

Puede crear un registro temporal de las contraseñas establecidas / restablecidas e intentadas en forma cifrada. Los expertos en seguridad (incluido yo) se estremecerían ante esta idea de cifrar (en lugar de hash) contraseñas (o incluso intentos de contraseña incorrectos), por lo que sugeriría tres precauciones si decide que necesita comenzar a registrar esta información.

  1. Envíe la información a una computadora separada / aislada , por lo que si el servidor principal está comprometido, el registro de contraseñas sigue siendo seguro.
  2. Use cifrado de clave pública (asimétrico) para la información registrada. La clave privada (descifrado) solo se almacena en un entorno aislado para que el desarrollador revise los datos registrados.
  3. Programe una tarea (o codifíquela) para que este registro temporal esté deshabilitado en una fecha en particular, o cuando una cantidad suficiente de pruebas haya tenido éxito.
respondido por el George Bailey 10.11.2016 - 19:58
fuente

Lea otras preguntas en las etiquetas