Recientemente hemos pasado a una mejor estrategia de almacenamiento de contraseñas, con todo lo bueno:
- Las contraseñas se almacenan después de pasar por bCrypt
- El usuario recibe un enlace de activación en la creación de la cuenta para confirmar la propiedad de la dirección
- Olvidé mi contraseña sin una pregunta de seguridad, se envió un enlace a su correo electrónico.
- El enlace caduca después de 24 horas, momento en el que deberán solicitar uno nuevo.
- Si la cuenta se crea a partir de nuestro personal, se envía un correo electrónico con una contraseña segura aleatoria. Al iniciar sesión, el usuario debe restablecerlo a algo que no sabemos y que es bCrypt'd.
Ahora, esto está de acuerdo con la "mejor práctica", pero esto aumentó mucho nuestra cantidad de solicitudes de soporte de usuarios habituales que no entienden todo esto, solo quieren iniciar sesión.
A menudo recibimos solicitudes de usuarios que se quejan de:
- Contraseña incorrecta (de la que necesitan restablecer a menudo la pegan con un espacio al final). Nos dicen qué están usando, pero no tenemos forma de decirles cuál es su contraseña real.
- Diciendo que no están recibiendo el correo electrónico que les enviamos (activación, restablecimiento, etc.). Este no suele ser el caso, después de mucha solución de problemas, generalmente descubrimos que cometieron un error tipográfico en el correo electrónico, que no están verificando la cuenta de correo electrónico correcta o que simplemente estaban en la carpeta de correo no deseado.
Por supuesto, no podemos probarlo porque no tenemos la contraseña. Estamos registrando los intentos fallidos, pero también borramos la contraseña que usaron, ya que es probable que sea la contraseña utilizada para otra cuenta y no queríamos almacenarla en un archivo de registro de texto sin formato. Esto nos deja prácticamente sin nada para ayudarlos cuando reportan problemas.
Tengo curiosidad por saber cómo la mayoría de las personas lidian con problemas como estos.
fuente
Respuestas:
Se puede solucionar mediante la inclusión de un enlace con un GUID único que los registra y los obliga a restablecer la contraseña. No obligue al usuario a copiar y pegar. (Además, ¿por qué no eliminar espacios en blanco al final de la contraseña en su formulario?)
Asegúrese de que su correo electrónico saliente esté libre de spam (tal vez configure cuentas de prueba en algunos servicios de correo comunes), registre cualquier cosa que ocurra y tal vez informe al usuario si intenta solicitar un nuevo restablecimiento (es decir, envíe un correo a johndoee @ gmail .com falló, usuario no encontrado, ¿lo deletreaste correctamente?). Además, sea claro para los usuarios sobre problemas de ortografía y spam.
Además, OpenID y otras autenticaciones de terceros también son una opción, como han dicho otros.
fuente
Yo diría que use un método de autenticación de terceros, como Facebook, OpenID, Google ... lo que sea apropiado para sus usuarios. Sin embargo, si sus usuarios no pueden recordar su contraseña, tal vez no puedan usar un sistema de autenticación de terceros ...
Dependiendo de su situación, es posible que pueda usar otro sistema, como los certificados de cliente SSL (definitivamente son difíciles de instalar para los usuarios finales, pero si se trata de una empresa y puede automatizar su instalación, es genial), Windows SSO, una aplicación móvil, etc.
fuente
¿Necesitas estar haciéndolo? Lo primero que debe hacer es determinar qué está protegiendo y de quién lo está protegiendo. Tal vez no valga la pena el costo de las mejores prácticas, y tal vez las mejores prácticas ni siquiera detendrán a su atacante.
Si te enfrentas a la NSA y tienes algo que quieren, ríndete y haz que la vida de tus usuarios sea más fácil. Si tiene números de tarjeta de crédito, tendrá que soportar los problemas que requiere el nivel de seguridad requerido, porque hay malos que los quieren y gastarán dinero y tiempo para conseguirlos. Es el acceso a un álbum de fotos familiar, ¿necesitas toda esa seguridad?
Lea sobre los trabajos de Buce Scheiners (Secretos y mentiras) como un buen comienzo para comprender la seguridad.
fuente
Lo primero que salta a la vista es que sus correos electrónicos van a ser basura. Configurar el correo electrónico para que se reconozca como real no es trivial. Le sugiero que busque cómo evitar que su correo electrónico se marque incorrectamente (¿pregunta separada sobre SO?)
La segunda cosa que recomendaría es dar a sus usuarios un sitio web / aplicación de un solo clic que inicie la contraseña para recuperar correos electrónicos. Negarse a hacerlo de otra manera que no sea el correo electrónico, no es seguro y sienta un mal precedente.
fuente
El hecho de que estén dispuestos a llamarlo y decirle su contraseña en voz alta le dice que para estos usuarios, la contraseña y la información que protege no es tan importante. Nunca haría ninguna de esas cosas con mi contraseña bancaria. Pero hay una serie de sitios que exigen contraseñas para cosas que realmente no los merecen. Tengo una contraseña estándar que utilizo para todos ellos, y cuanto más "oye, esa no es una contraseña segura" o "te haremos una contraseña y te obligaremos a cambiarla regularmente" y así sucesivamente, menos quiero usar ese servicio Tendría una breve conversación con las personas de "valor comercial" en su vida para ver si, de hecho, simplemente mantenerlos en texto plano en la base de datos y enviarlos por correo electrónico a las personas que lo soliciten sería un mejor enfoque.
Si de hecho esto fuera tan seguro, podría intentar lo que hizo uno de mis clientes con el sistema que codificamos para ellos. Mientras habla por teléfono con la persona, vaya a la base de datos y cambie su dirección de correo electrónico a la suya. Luego vaya a la web y haga clic en Olvidé mi contraseña. Espere el correo electrónico y úselo para iniciar sesión. Utilizando el sitio web, cambie la contraseña a Contraseña u otra cosa que esté de acuerdo verbalmente con el cliente. Cambie su dirección de correo electrónico a su propia dirección y dígales "todo listo, ¡su nueva contraseña está activa ahora!" Cliente feliz y no tiene que explicarles lo que está sucediendo.
fuente
El método de último recurso que utilicé en un sistema con usuarios muy analfabetos en el pasado fue dirigir al usuario a una pantalla donde se les dio un número de teléfono y un número de confirmación. Llamaron al número de teléfono, verificaron su identidad a través de medios manuales y luego leyeron la confirmación. la persona de soporte inició sesión en un sistema separado, ingresó el número y obtuvo un segundo número para devolver al cliente. el cliente usó el segundo código para continuar a la página de restablecimiento de contraseña. la versión del cliente de la página no podía ejecutarse desde las subredes del personal de soporte y la pantalla de soporte no podía ejecutarse desde los clientes.
no es a prueba de balas ya que una persona de soporte podría usar un vpn para ejecutar ambos extremos desde una ubicación, pero fue suficiente para la auditoría ya que la cuenta de soporte se registró como responsable de la actividad
fuente
Tal vez mediante la implementación de reglas de seguridad que no son LOCAS. Al hacer esto, todo lo que obtienes es menos seguridad realmente, porque el sistema es tan difícil de usar que tus clientes te reevaluarán las contraseñas a ti y a sus amigos solo para que funcione.
¿No puedes enviarles enlaces NORMALES y luego la contraseña a continuación? Si el cliente de correo electrónico rompe el enlace, simplemente muestre el formulario con un campo "código de activación" ... "escriba el código de activación que tiene en el correo electrónico" ... 5 dígitos para que no confundan 0 con O, etc. 4 los dígitos están bien para las tarjetas de crédito y necesita una política tan complicada para un inicio de sesión simple? Si el código no funciona, ¿repite la comprobación con la cadena TRIMmed? Supongo que no lo hará menos seguro, ¿verdad? :)
Para mí también sucede a menudo ... hago doble clic en la contraseña y el espacio final se copia. Es increíble para mí ¿por qué Peple no puede resolver solo eliminar los caracteres blancos finales cuando la verificación falló y repetir el proceso? Entonces tal vez TOGGLE letter case para que compruebe si no presioné CL accidentalmente.
Lo has complicado demasiado. No es "restablecer contraseña" y "contraseña inicial" ... sino "Código de confirmación" y "Ingrese el número de confirmación que le enviamos al correo electrónico", "¿No tiene correo electrónico? Fue enviado a [email protected], verifique su spam nuevamente, ¿aún no lo tiene? Reenvíe su correo electrónico de confirmación ". En el cuerpo HTML un enlace. http://xxx.com/conf-12345-mymail-gmail-com.html . Ningún cliente de correo romperá esto.
fuente