¿Debo informar a un usuario que ha ingresado un nombre de usuario o dirección de correo electrónico desconocidos?

23

En mi sitio web tengo una página de restablecimiento de contraseña que los usuarios pueden usar si han olvidado su contraseña. En esta página, pueden ingresar su nombre de usuario o su dirección de correo electrónico y presionar "restablecer", que les enviará un enlace para restablecer su contraseña.

Si han ingresado un nombre de usuario o correo electrónico incorrecto, ¿debo informarles que no existe en nuestro sistema o es un riesgo para la seguridad?

    
pregunta AlexFoxGill 11.07.2014 - 13:43
fuente

5 respuestas

22

La respuesta es generalmente depende. Esto se basa realmente en la seguridad de su sistema.

Los usuarios pueden crear nuevas cuentas sin restricción

Si es así, no tiene sentido que no les diga. No puede tener nombres de usuario o direcciones de correo electrónico entrecruzados, por lo que debe informar a un nuevo usuario si su nombre de usuario o correo electrónico ya se ha utilizado. Un atacante podría obtener los nombres de usuario y correos electrónicos atacando el nuevo sistema de registro de usuarios. Darles un lugar similar para atacar en la sección de contraseña olvidada no daña tu seguridad porque el método solo existe en otro lugar. Solo asegúrate de que las restricciones que usas en el sistema de registro sean las mismas que las restricciones para solicitar una contraseña (es decir, cualquier sistema antispam que uses).

Los usuarios no pueden crear nuevas cuentas sin restricción

Considere un sistema de invitación solamente. La única forma en que se le permite registrarse es si alguien lo ha autorizado. Esta podría ser una instancia en la que un administrador establece su nombre de usuario, correo electrónico y contraseña iniciales (potencialmente de forma manual). Este sistema le permitiría obtener seguridad al no informar a los usuarios si la información ingresada es correcta o no. Los nombres de usuario y los correos electrónicos podrían tratarse como un secreto poco protegido.

En general

Tenga en cuenta que esto es un golpe a la usabilidad. Si alguien escribe mal su dirección de correo electrónico, es posible que no se den cuenta de que lo hicieron. Los correos electrónicos de los sitios web no siempre llegan de inmediato, por lo que un usuario podría estar esperando un correo electrónico que nunca llega.

    
respondido por el William Forcier 11.07.2014 - 15:52
fuente
8

Existe una antigua tradición de no que distingue entre "ese nombre de usuario no existe" y "ese nombre de usuario existe pero la contraseña es incorrecta". Viene de épocas más antiguas, cuando los atacantes y los defensores eran nuevos en el trabajo y el contexto era diferente. En ese momento, el atacante estaba "afuera" y quería adivinar un par de nombre de usuario y contraseña para ingresar al mainframe. En ese momento, las contraseñas eran aún más deficientes que en la actualidad, y se creía que mantener los nombres de usuario en secreto ayudaría sustancialmente ("el atacante nunca adivinará que tenemos un usuario llamado 'smith'!").

Una lectura interesante es esta descripción del 1988 "Morris" gusano . Esa bestia destruyó toda Internet (era más pequeña que en la actualidad) por el ancho de banda total que consumían todas las instancias de gusanos que se reproducían locamente sin control. El gusano podría ingresar a los sistemas a través de varios métodos, uno de los cuales es el descifrado de contraseñas. Curiosamente, el gusano recopila primero los nombres de las cuentas de varias fuentes, incluidos los archivos ".forward", y luego (y solo entonces) intenta un diccionario de 432 palabras. Esto ilustra dos puntos:

  • Los nombres de cuenta no son secretos. No existen solo en el sistema objetivo; también pueden inferirse a partir de diversos elementos de datos en otras máquinas, incluidos (en los tiempos modernos) los archivos de configuración SSH, las libretas de direcciones, ...

  • En 1988, eran muy malos para elegir contraseñas seguras.

Los tiempos han cambiado. En particular, como han señalado otros, muchos sistemas modernos permiten el registro automático: cualquiera puede intentar iniciar sesión y ver por sí mismo si un nombre de cuenta dado es "gratuito" o no. Muchos otros sistemas de destino permiten la recopilación de nombres de cuentas (por ejemplo, los foros web pueden usar el pseudo-nombre de la cuenta del contribuyente). Esto hace que la confianza en el secreto de los nombres de usuarios sea más endeble que nunca. Por otro lado, uno puede esperar que los usuarios promedio ahora elijan contraseñas más seguras (pensar de otra manera sería demasiado deprimente). El efecto neto es un cambio de equilibrio: la tradición de mantener en secreto los nombres de las cuentas ha perdido la mayor parte de su relevancia.

Sin embargo , las tradiciones son fuerzas fuertes. Si su sistema devuelve el error "ese nombre de usuario no existe" y un mensaje diferente para "su contraseña es incorrecta", entonces es probable que algunos usuarios se sientan nerviosos y escandalizados, y lo molesten con quejas sobre su irresponsabilidad al divulgar El mundo en general que el nombre de Joe es Joe. Puede discutir y ofrecer razones racionales por las que esto no es un problema (ver arriba); algunos quedarán poco convencidos. Esto no es bueno cuando los usuarios son clientes ; Y, en cualquier caso, esto consume demasiado tiempo. Es más fácil mantener la antigua tradición, incluso si no tiene sentido real; Puede verlo como una forma de hacer frente a la irracionalidad básica de los usuarios humanos.

    
respondido por el Tom Leek 11.07.2014 - 21:59
fuente
4

No, no debe informarles si el nombre de usuario no existe, ya que permitiría a un atacante descubrir nombres de cuentas que podrían intentar descifrar. Si envía un mensaje genérico "Se ha enviado un correo electrónico de restablecimiento, verifique su bandeja de entrada". incluso cuando la cuenta no existe, un atacante gana nada al intentarlo.

    
respondido por el GdD 11.07.2014 - 14:02
fuente
3

Lo que más importa en términos de seguridad es lo que gana un atacante al saber si una ID o dirección de correo electrónico específica tiene una cuenta en su sitio.

Por ejemplo, si está haciendo algún tipo de negocio que se puede considerar como un problema de privacidad, o si las cuentas en su sitio pueden usarse para gastar dinero o tener algún valor intrínseco (en otras palabras, si puedo obtener algo). de phishing su sitio). Algunos sitios no tienen este tipo de problema, por ejemplo, una plataforma de microblogging o OSN mostraría su ID en su página de todos modos, por lo que avisar a un usuario que escribió un ID inexistente puede ser útil.

Desde una perspectiva de usabilidad, no decirle a su usuario si su ID existe es desastroso. Cualquier sitio web que use ID debe al menos confirmar una ID (las ID son específicas de su sitio para que no proporcionen spammers mucha información). No decirle a su usuario la dirección de correo electrónico también es una idea terrible: necesitan volver a escribir cada contraseña posible que hayan usado para cada una de sus direcciones de correo electrónico.

Pregúntese con qué frecuencia los usuarios visitan su sitio web. Una baja frecuencia de visitas amplificará enormemente los problemas de usabilidad, hasta el punto en el que quizás desee habilitar contraseñas de un solo uso enviadas por texto o correo electrónico de un formulario de inicio de sesión tradicional, para cualquiera que se conecte solo unas pocas veces al año.

Por ejemplo, tengo dos direcciones diferentes en el trabajo, varias contraseñas para diferentes subsistemas y una política de restablecimiento de contraseña, además de mi dirección de correo electrónico personal y un montón de contraseñas diferentes. Puede tomar decenas de intentos para encontrar la combinación correcta de correo electrónico / contraseña para un sitio al que no suelo ir.

Como lo señaló @William Forcier, puedes conocer si un correo electrónico está en uso por varios medios :

  • formulario de creación de cuenta
  • formulario de inicio de sesión
  • formulario de contraseña olvidada

Sin embargo, aún podría implementar diferentes defensas para cada formulario. Si decide que debe ocultar completamente las direcciones de correo electrónico, puede bloquear / complicar la creación de la cuenta (CAPTCHAs) a una dirección IP específica después de un número demasiado grande de creaciones. De todos modos, es probable que necesite un mecanismo para protegerse contra las cuentas de correo no deseado (pero recuerde no arruinar la vida de sus usuarios reales con soluciones inutilizables, por ejemplo, sirviendo CAPTCHA).

    
respondido por el Steve DL 11.07.2014 - 21:37
fuente
2

Un aspecto que no he visto mencionado es el hecho de que surgen muchas dificultades de inicio de sesión porque el nombre preferido de un usuario se tomó antes de intentar registrarse en un sitio determinado. Si "JSmith" intenta iniciar sesión y no puede, lo que realmente quiere saber es si el sitio tiene una cuenta llamada "JSmith", sino si el sitio tiene una cuenta para él llamada JSmith. Si el sitio tiene alguna información pública asociada con los usuarios (por ejemplo, una imagen de avatar) y permite que dicha información se consulte libremente, puede ser útil no solo indicar si existe una cuenta para JSmith, sino también mostrar cierta información asociada. . Si Jack Smith siempre usa un gato como avatar, y cuando intenta iniciar sesión bajo JSmith se le muestra un perro, sabría que el problema no es una contraseña olvidada, y por lo tanto debería probar uno de sus "fallback" nombres de usuarios en lugar de un enlace de "contraseña olvidada".

    
respondido por el supercat 11.07.2014 - 23:08
fuente

Lea otras preguntas en las etiquetas