Mejores prácticas para el inicio de sesión / autenticación web?


Escribir el código para la parte de autenticación de usuario de un sitio web (incluido el registro de la cuenta, los inicios de sesión y los restablecimientos de contraseñas) es bastante simple, pero ¿qué necesita para hacer una configuración de autenticación de usuario realmente buena? Por ejemplo, consideraría que no almacenar contraseñas de texto plano es un requisito mínimo para un sitio web, pero ese consejo parece transmitirse en gran medida de boca en boca, y muchos sitios aún no lo siguen.

¿Qué es algún otro bien consejos o buenos requisitos para la parte de autorización del usuario de un sitio web? Por ejemplo, ¿los nombres de usuario deben ser seleccionados por el usuario o deben ser direcciones de correo electrónico? ¿Alguna dificultad para la parte de registro de usuario? (CAPTCHAs son probablemente vale la pena un tema entero por sí mismos.) Cualquier trampa para la parte de restablecimiento de contraseña? ¿Algo más?

Editar:

Algo duplicado aquí: mejores prácticas para páginas de inicio de sesión

Author: Community, 2008-11-14

5 answers

Cifrado

Hubo una pregunta sobre esto ayer - " ¿Por qué debería preocuparme por hashing contraseñas de todos modos?" que cubre todas las razones por las que debe hacer esto.

Captcha

No estoy de acuerdo con Ricardo en el punto captcha - siempre requieren un captcha, incluso los sitios realmente impopulares son dirigidos por los spammers. Tengo blogs que configuré para probar algunos bits de código a los que nunca vinculé desde ningún otro lugar que fueron encontrados milagrosamente por spammer. Cuando un spammer ha inundado su sitio con millones de publicaciones idénticas sobre viagra, lamentará no tomar los 20 minutos adicionales para instalar un captcha. reCAPTCHAtiene algunos complementos que hacen que instalarlo sea bastante simple, Y puedes ayudarlos a digificar libros.

No olvide que los usuarios con discapacidad visual necesitarán un captcha de audio.

Olvidé mi contraseña

Si ha confirmado la dirección de correo electrónico del usuario, entonces puede generar un nueva contraseña para ellos. Asegúrese de pedirles que cambien su contraseña inmediatamente, ya que las personas olvidarán las contraseñas generadas aleatoriamente de inmediato.

Correos electrónicos

NO te molestes en implementar expresiones regulares complejas que cubran todas las direcciones de correo electrónico posibles. Haga una simple comprobación de una @ y luego deje que el usuario haga clic en un enlace enviado a su dirección de correo electrónico para verificar. Esta es una práctica común en estos días, pero todavía me encuentro con personas que tratan de ser 'inteligentes' al respecto.

Validación del formulario

Así como su validación del lado del servidor en el formulario de registro, debe tener una validación del lado del cliente en el formulario AJAX para que el usuario sepa mientras lo está llenando si su nombre de usuario elegido es tomado, si su contraseña es aceptable, etc. Los usuarios pueden sentirse frustrados por tener que volver a enviar formularios de registro varias veces.

Autenticación en sí

Es bueno permitir que la gente inicie sesión con su nombre de usuario o dirección de correo electrónico ya que es más probable que las personas recuerden las direcciones de correo electrónico que los nombres de usuario, especialmente si no han estado en tu sitio en un tiempo.

Si su sitio necesita seguridad adicional (por ejemplo, si está vendiendo cosas y la gente puede obtenerlas simplemente iniciando sesión), solicite otra información. Preguntar por su código postal es una buena idea, ya que solo toma unos segundos adicionales para escribir y hace que sea considerablemente más difícil forzar contraseñas brutales.

 19
Author: victoriah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:25:02

En el tema del nombre de usuario, depende de cómo se utilizará el nombre de usuario en el sitio (más allá de iniciar sesión). Si su sitio se basa en el contenido generado por el usuario y muestra el nombre de usuario con el contenido, permita que el usuario elija el suyo propio y asegúrese de que no sea una dirección de correo electrónico. Además, si se mostrará el nombre de usuario, generalmente proporciono un poco de advertencia en el formulario de registro para que el usuario lo sepa, para que no use su nombre completo solo para enojarse más tarde cuando se muestre en el sitio.

Recomiendo verificar la disponibilidad y validez de un nombre de usuario a través de algún tipo de llamada Ajax mientras el usuario está en el formulario. Tener el formulario recargado con la contraseña y la confirmación de contraseña desaparecida, solo tener que pensar en un nuevo nombre de usuario y volver a ingresar los datos es un dolor.

Otras cosas a considerar serían imponer longitudes min/max y algunas reglas sobre contraseñas... sin embargo, no haga que sea difícil registrarse. Además, acepte caracteres especiales en la contraseña. Me tengo un par de contraseñas muy fuertes que me gusta usar y muchos sitios no me permiten usarlas, por lo que mi cuenta termina siendo menos segura de lo que habría hecho por mi cuenta.

CAPTCHA es una buena idea, solo asegúrate de que no sea súper difícil de entender, eso también puede ser frustrante.

Hay muchas cosas a considerar y varias opciones para cada una, pero esperamos que esto te ayude a comenzar.

 3
Author: Andrew Van Slaars,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-14 18:34:52

Por favor, también asegúrese de que su página de inicio de sesión esté protegida con SSL, si no lo hace, el nombre de usuario y la contraseña se enviarán a través de Internet en texto claro de todos modos. El resto de su sitio no necesita estar protegido por SSL si no hay información confidencial en ningún otro lugar.

 2
Author: user25788,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-14 18:58:32

Yo diría que utiliza muchas de las API de redes sociales ampliamente disponibles para hacer el trabajo por usted. Al hacerlo, podrás liberar completamente a tu página de bastantes fallas de seguridad en términos de Inicio de sesión y autenticación de usuarios (leer contraseñas y datos de usuario) y pasarlo a las manos estables de dichas Redes Sociales.

Y dado que todo el proceso se puede completar con el clic de uno botón, también hace que su UX sea mejor y se puede integrar sin problemas en su UI.

Algunos ejemplos de tales API serían Facebook, Google, LinkedIn, Twitter, Dribbble. Seleccione el suyo según su idea de la base de usuarios a la que se dirigirá.

También, en mi experiencia reciente, el hola.js framework hace esto tarea bastante fácil.

 2
Author: Paulo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-31 06:53:52

MSDN publicó un artículo que toca algunos de estos temas; una copia está disponible aquí. La mayoría de las sugerencias reflejan ideas aquí; una idea adicional de ese artículo es " rastrear el tráfico a través de tu embudo de registro."Realice un seguimiento de las visitas a las partes de error, advertencia y recuperación del sistema para ver si necesita realizar algunas mejoras de usabilidad.

 0
Author: Josh Kelley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-18 14:07:01