authentication - por - ¿Mejores prácticas para el inicio de sesión/autenticación web?
metodo de autenticacion jwt (5)
Escribir el código para la parte de autenticación de usuario de un sitio web (incluido el registro de la cuenta, inicios de sesión y reinicios 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 no almacenar contraseñas de texto sin formato como un requisito mínimo para un sitio web, pero ese consejo parece transmitirse en gran parte de boca en boca, y muchos sitios aún no lo siguen.
¿Cuál es algún otro buen consejo o buenos requisitos para la porción de autenticación del usuario de un sitio web? Por ejemplo, ¿deberían los nombres de usuario ser seleccionados por el usuario, o deberían ser direcciones de correo electrónico? ¿Alguna dificultad para la parte de registro del usuario? (Los CAPTCHA probablemente valen la pena un tema entero por sí mismos). ¿Hay algún inconveniente para la porción de restablecimiento de contraseña? ¿Algo más?
Editar:
Algo duplicado aquí: best-practices-for-login-pages
Asegúrese también 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 lado.
En el tema de nombre de usuario, depende de cómo se usará el nombre de usuario en el sitio (más allá de iniciar sesión). Si su sitio se basa en contenido generado por el usuario y muestra el nombre de usuario con el contenido, permita que el usuario elija el suyo y asegúrese de que no sea una dirección de correo electrónico. Además, si se muestra el nombre de usuario, generalmente proporciono una pequeña advertencia en el formulario de registro para que el usuario lo sepa, por lo que no usan su nombre completo solo para enojarse más tarde cuando se muestra en el sitio.
Yo recomendaría verificar la disponibilidad y la validez de un nombre de usuario a través de algún tipo de llamada Ajax mientras el usuario está en el formulario. Hacer que el formulario vuelva a cargarse con la contraseña y la confirmación de la contraseña perdidas, solo para tener que pensar en un nuevo nombre de usuario y volver a ingresar los datos es un problema.
Otras cosas a tener en cuenta serían hacer cumplir las longitudes mínimas / máximas y algunas reglas sobre las contraseñas ... sin embargo, no dificultan el registro. Además, acepte caracteres especiales en la contraseña. 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 hubiera 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 que considerar y varias opciones para cada una, pero espero que esto lo ayude a comenzar.
MSDN publicó un artículo que toca algunos de estos problemas; 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 su embudo de registro". Realice un seguimiento de las partes de error, advertencia y recuperación del sistema para ver si necesita realizar algunas mejoras de usabilidad.
Diría que usas muchas de las API de redes sociales ampliamente disponibles para hacer el trabajo por ti. Al hacerlo, podrá aliviar completamente su página de bastantes fallas de seguridad en términos de autenticación de inicio de sesión y usuario (leer contraseñas y datos de usuario) y pasarla a las manos estables de dichas redes sociales.
Y dado que todo el proceso se puede completar con un solo clic, también mejora su UX y se integra fácilmente 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á.
Además, en mi experiencia reciente, el framework hello.js hace que esta tarea sea bastante fácil.
Cifrado
Hubo una pregunta sobre esto ayer: " ¿Por qué debería importarme las contraseñas hash de todos modos? ", Que abarca todas las razones por las que debería hacer esto.
Captcha
No estoy de acuerdo con Ricardo en el punto de captcha: siempre se requiere un captcha, incluso los sitios realmente impopulares son atacados por los spammers. Tengo blogs que configuré para probar algunos trozos de código que nunca he vinculado desde ningún otro lugar que milagrosamente encontraron los spammers. 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. reCaptcha tiene algunos complementos que hacen que la instalación sea bastante simple, Y usted puede ayudarlos a digitalizar libros.
No olvide que los usuarios con discapacidad visual necesitarán un captcha de audio.
Se te olvidó tu contraseña
Si ha confirmado la dirección de correo electrónico del usuario, puede generar una nueva contraseña aleatoria 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 se moleste en tratar de implementar expresiones regulares complejas que cubran todas las direcciones de correo electrónico posibles. Haga una simple comprobación de un @ y luego permita 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 intentan ser ''inteligentes'' al respecto.
Validación de formulario
Además de la validación del lado del servidor en el formulario de registro, debe tener la validación del lado del cliente en forma de AJAX para informar al usuario, ya sea que lo llene, si se toma su nombre de usuario elegido, si su contraseña es aceptable, etc. puede frustrarse al tener que volver a enviar los formularios de registro varias veces.
Autenticación en sí
Es agradable permitir que las personas inicien 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 su sitio desde hace tiempo.
Si su sitio necesita seguridad adicional (por ejemplo, si está vendiendo material y la gente puede obtenerlo simplemente iniciando sesión), solicite otro tipo de información. Pedir una postal / código postal es una buena idea, ya que solo lleva unos segundos escribir y dificulta considerablemente las contraseñas de fuerza bruta.