Para la mayoría de los sitios web, tiene diferentes áreas dentro de él (página de inicio, perfil de usuario, página de administrador, etc.), algunas de las cuales serán públicas y otras deberán restringirse solo a ciertos usuarios. A menudo desea identificar a los usuarios de manera única para que pueda proporcionar contenido personalizado o para capturar información específica de un usuario. Muchos sitios también necesitan proteger parte del sitio, como un área administrativa para mantener y actualizar el contenido del sitio. En un sitio de CMS, algunos usuarios pueden crear contenido, pero otros deben aprobar ese contenido antes de que se muestre al público.
Cualquiera que sea la necesidad, restricción o personalización, se requiere identificar a cada usuario que accede a su sitio. Para un sitio de Internet destinado a usuarios generales, el nombre de usuario y la contraseña aún prevalecen en gran medida porque no hay una mejor opción. Hay otras opciones si trabaja en entornos especiales, como una Intranet de la empresa, donde tiene cierto control sobre los visitantes del sitio..
Si bien es una necesidad común, los inicios de sesión y las contraseñas a menudo se manejan de una manera que deja al sitio web y sus usuarios, innecesariamente más vulnerables a los ataques de seguridad. Al seguir algunas de las mejores prácticas, puede proteger mejor su sitio y su contenido de los piratas informáticos. Las consecuencias de una protección deficiente pueden ser graves. Imagine un sitio donde cualquier usuario pueda publicar contenido que parezca ser de la empresa debido a una mala gestión de las contraseñas o una tienda en línea donde cualquier usuario pueda ver todos los pedidos realizados en el sitio..
Echemos un vistazo a algunas consideraciones de seguridad mientras trabajamos con nombres de usuario y contraseñas en sus sitios web.
El inicio de sesión consiste en un nombre de usuario que lo identifica a usted y una contraseña para validar que usted es el usuario que dice ser. Los sitios web a menudo permiten que el usuario especifique un nombre de usuario personalizado o use la dirección de correo electrónico del usuario como su nombre de usuario.
Los correos electrónicos no cambian con frecuencia y la mayoría de los sitios web ya recopilan esta información, por lo que el usuario también tendrá menos probabilidades de olvidar su correo electrónico que el nombre de usuario que crearon. El correo electrónico también será automáticamente único ya que los usuarios rara vez comparten una cuenta de correo electrónico y aquellos que lo hacen, probablemente no querrían cuentas separadas.
Las desventajas de un correo electrónico incluyen que dos personas que comparten un correo electrónico no pueden tener cuentas separadas. Además, si su sitio tiene una razón legítima para que una persona tenga varias cuentas, es posible que esto no sea posible con los correos electrónicos, pero que sea más fácil de implementar utilizando nombres de usuario. También es probable que un correo electrónico sea más fácil de hackear ya que un usuario probablemente use el mismo correo electrónico en cada sitio, pero la mayoría de los nombres de usuario probablemente no serán mucho más difíciles de hackear, ya que los usuarios tienden a reutilizar los nombres de usuario tanto como reutilizan las contraseñas.
A menos que tenga una razón específica para evitar una dirección de correo electrónico, prefiera el correo electrónico para el nombre de usuario de inicio de sesión. El uso del correo electrónico también se ha convertido en la norma en los sitios web. No se olvide, sin embargo, para proporcionar un inicio de sesión basado en correo electrónico con una forma de cambiar el correo electrónico. Sin esta función, un usuario tendría que crear una nueva cuenta y perder todo el historial pasado solo porque cambió de proveedor de Internet o perdió una cuenta anterior debido a la graduación o el cambio de trabajo, lo que provocó que su antiguo correo electrónico desapareciera..
Siempre tenga cuidado al utilizar el correo electrónico como inicio de sesión para no mostrarlo públicamente, tanto por razones de privacidad como por problemas de prevención de spam..
La página de inicio de sesión de su sitio web será el primer punto de investigación para un hacker. El hacker intentará determinar las cuentas válidas que existen en un sitio web. El manejo adecuado de la página de inicio de sesión dificultará el trabajo del pirata informático. Para comenzar, debe minimizar la cantidad de datos que un inicio de sesión fallido proporciona a un atacante. Su idea inicial cuando alguien ingresa un nombre de usuario que no se reconoce puede ser proporcionar un mensaje útil que debe verificar su nombre de usuario. Puede proporcionar una página más segura mostrando el mismo mensaje de error cuando no se encuentra el nombre de usuario y cuando la contraseña no coincide con la contraseña para el usuario dado. El mensaje debe indicar que la combinación de nombre de usuario y contraseña no fue correcta, para que el usuario sepa verificar ambos datos, no solo uno u otro..
Si su sitio utiliza correos electrónicos para el nombre de usuario de inicio de sesión, un atacante puede validar fácilmente si un usuario tiene una cuenta en su servicio si devuelve un mensaje diferente para un inicio de sesión desconocido en comparación con una combinación de nombre de usuario y contraseña fallida. Hace las cosas un poco menos convenientes para el usuario, pero la seguridad agregada es normalmente la mejor compensación.
Como se indicó, eliminando el mensaje específico para un nombre de usuario no válido, se intercambia una mayor seguridad por una peor experiencia de usuario. Proporcionar un mensaje de que no existe un inicio de sesión ayudará al usuario a detectar errores tipográficos, como escribir Juan
en lugar de jon
más fácil. Ese mensaje también ayuda a un usuario que no recuerda qué nombre de usuario usó en su sitio. Tenga en cuenta que este tipo de mensajes les brinda a los piratas informáticos una forma simple y fácil de verificar si un usuario existe en su sitio..
También puede ayudar a frustrar a un pirata informático manejando mejor los intentos de inicio de sesión múltiples. Accidentalmente, escribir mal un nombre de usuario o contraseña más de una vez ocurre bastante comúnmente de un carácter mal escrito, al transponer dos caracteres, o al usar la contraseña para otro sitio en lugar de la contraseña correcta. Permitir un número ilimitado de intentos de inicio de sesión abre la puerta a un ataque de fuerza bruta que consiste en probar los nombres de usuario y las contraseñas repetidamente para determinar el inicio de sesión correcto. Las herramientas y los scripts automatizados aceleran el proceso permitiendo que un pirata informático trabaje metódicamente a través de muchas contraseñas potenciales, hasta encontrar el inicio de sesión correcto.
La introducción de un mayor tiempo de retardo después de cada intento fallido de inicio de sesión también ayuda a frustrar a los piratas informáticos. El primer intento de inicio de sesión ocurre normalmente. El segundo inicio de sesión se retrasa una fracción de segundo antes de devolver el resultado. Los intentos adicionales se retrasan cada vez más antes de devolver una respuesta. Este retraso permite una interrupción mínima para un usuario legítimo que ha cometido un error, pero ralentiza al pirata informático que intenta forzar el sitio de forma brutal.
Para datos más confidenciales, se puede adoptar un enfoque más sólido al bloquear la cuenta después de varios intentos fallidos. El bloqueo de la cuenta la desactiva de forma temporal o permanente. El bloqueo detiene los ataques de fuerza bruta, ya que después de un punto, el inicio de sesión no funcionará. Una desactivación temporal debe tener un efecto mínimo en el usuario siempre que se muestre un mensaje por el motivo del bloqueo. Un bloqueo permanente requiere que el usuario contacte al soporte para solucionar el problema y se ajusta mejor a los inicios de sesión, protegiendo datos importantes.
Las contraseñas son el aspecto más sensible del inicio de sesión. Nunca almacene contraseñas en texto plano. Nunca. Siempre. Hacerlo significa que casi cualquier problema de seguridad puede exponer la información de inicio de sesión. Incluso las contraseñas cifradas deben evitarse, ya que si el pirata informático obtiene acceso a los datos cifrados, el proceso de descifrado puede ser mucho más fácil. Cualquier almacenamiento donde pueda recuperar una contraseña, hace que sea más fácil para un pirata informático hacer lo mismo.
Las contraseñas deben almacenarse con sal y hash. Una sal es un valor único generado aleatoriamente que se almacena para cada inicio de sesión y se agrega antes del hashing. Agregar la sal evita que contraseñas idénticas tengan el mismo hash e impide que un pirata informático cree una lista del resultado de hash de posibles combinaciones de contraseñas de antemano. Añadiendo el hash aleatorio, una contraseña de abc123
(por favor nunca use nada de eso como una contraseña real) resultará en un hash diferente para cada usuario.
Una función hash convierte la contraseña en un valor de longitud fija. Hay funciones específicamente diseñadas para contraseñas como PBKDF2 o Bcrypt. Los procesadores GPU de las tarjetas gráficas modernas pueden realizar los cálculos necesarios para el hash y pueden descanso Muchos algoritmos débiles rápidamente. Las máquinas dedicadas con el fin de romper contraseñas pueden determinar cualquier contraseña de ocho caracteres o menos, en menos de seis horas.
Los usuarios a menudo tienden a reutilizar la misma contraseña para la mayoría de los sitios donde tienen cuentas. Muchos sitios han comenzado a probar las credenciales expuestas de los principales hacks de inicio de sesión de la cuenta con sus propios inicios de sesión y se contactan con los usuarios cuyas combinaciones de nombre de usuario y contraseña coinciden. Evernote y Facebook examinaron recientemente las credenciales de inicio de sesión publicadas de Adobe y alertaron a los usuarios que usaban esas mismas credenciales.
La forma más fácil de manejar las contraseñas correctamente es usar las herramientas incluidas en su marco web. La seguridad de las contraseñas es complicada y hacer solo una cosa puede dejar las contraseñas de los usuarios abiertas para ser atacadas. El paso de pH proporciona una biblioteca de dominio público para PHP usando Bcrypt. Los proveedores de membresía .NET incorporados más antiguos usaban hashes más débiles, pero los nuevos proveedores universales usan PBKDF2. Rails también proporciona una gema Bcrypt..
Cuando protege las contraseñas de forma adecuada para que no puedan recuperarse, pierde la capacidad de proporcionar al usuario una contraseña olvidada. Luego, debe proporcionar una forma alternativa para que un usuario que olvidó su contraseña legítimamente para restablecer la contraseña de manera segura.
Una buena página de restablecimiento de contraseña le permite al usuario cambiar la contraseña sin saber la contraseña actual. El método tradicional le permite al usuario ingresar su dirección de correo electrónico y luego envía un enlace a una página web que le permite restablecer la contraseña. Enviar un enlace es más seguro que enviar una contraseña, ya que la nueva contraseña no se crea hasta que el usuario accede a la página. El envío de una nueva contraseña por correo electrónico crearía una nueva credencial que cualquier persona que intercepte el correo electrónico podría utilizar sin el conocimiento del usuario. Si alguien intercepta el correo electrónico y restablece la contraseña, el usuario sabrá cuándo accederá e intentará restablecer su contraseña..
Una buena página de reinicio tampoco debe proporcionar validación de que existe una cuenta. La lógica es la misma que discutimos con respecto a no proporcionar comentarios si no existía una cuenta al iniciar sesión. Incluso si el inicio de sesión no existe en el sistema. El mejor enfoque es proporcionar un mensaje de que las instrucciones se han enviado a la dirección de correo electrónico archivada. Aún debe enviar un correo electrónico al correo electrónico ingresado ya que podría ser un caso legítimo de haber olvidado qué correo electrónico se usó para una cuenta, como ingresar un correo electrónico de trabajo en lugar de un correo electrónico personal.
El enlace para restablecer las contraseñas debe diseñarse de modo que la solicitud de restablecimiento tenga una vida útil limitada y solo pueda usarse una vez. Cree un token único para cada solicitud de restablecimiento, vinculado a la cuenta solicitada y guárdelo en una base de datos. Este token se convierte en parte de la URL enviada por correo electrónico para restablecer la contraseña. Al token también se le debe asignar un tiempo de caducidad y debe eliminarse después de que se complete el restablecimiento. Si alguien intenta usar un token que ya ha sido usado o caducado, la solicitud fallará. El tiempo de vencimiento debe ser lo suficientemente largo como para permitir que se reciba el correo electrónico y que el usuario complete la acción, pero no tanto como para permitir el uso demasiado lejos en el futuro. Un marco de tiempo de unas pocas horas por lo general será suficiente.
Restablecer una contraseña mediante el correo electrónico también hace que la seguridad de su sitio dependa de la integridad del correo electrónico del usuario. Si se puede acceder al correo electrónico, esa persona puede restablecer la contraseña. Los sitios pueden agregar preguntas de seguridad que deben responderse antes de restablecer la contraseña. Las preguntas de seguridad proporcionan poca seguridad adicional si las respuestas son fáciles de encontrar. Una pregunta de seguridad de "¿Cuál es mi ciudad natal?" proporciona poca seguridad si la respuesta se puede encontrar en el perfil de Facebook de la persona. Para obtener más información sobre el desarrollo de buenas preguntas, consulte http://goodsecurityquestions.com/.
Un nombre de usuario y contraseña solo requieren un par de información para acceder a un sitio web. Cuando se proporciona esa información, se asume que el usuario es la persona correcta. Para hacer que las credenciales de robo sean menos efectivas, puede agregar un segundo paso al proceso de autenticación. Además de algo que el usuario sabe (el nombre de usuario y la contraseña), el usuario también debe usar algo que tenga en su poder actual, generalmente un teléfono celular a través de SMS o una aplicación para este fin..
Los bancos fueron probablemente los primeros en implementar este proceso utilizando hardware personalizado para generar un código dependiente del tiempo. Google popularizó el uso de mensajes de texto SMS o una aplicación como un segundo paso. Muchos sitios ahora usan un inicio de sesión compatible con la implementación de RFC 6238 de Google. Puede encontrar bibliotecas que ya implementan esta técnica para los marcos más populares como ASP.NET, ASP.NET # 2, Ruby on Rails, PHP y Django.
Para evitar estos problemas, tiene otra opción, deje que alguien más se ocupe de todo esto al integrarse con un tercero para la autenticación, como Twitter, Facebook u OpenID. Hacerlo ofrece ventajas y desventajas. Quita la mayoría de las preocupaciones de seguridad que hemos discutido aquí cuando alguien más se ocupa de esos problemas. Sin embargo, estos otros sitios también son probablemente un objetivo de hackers más grande que tú. Si usa otro sitio para manejar la autenticación, entonces si ese inicio de sesión se ve comprometido, los piratas informáticos tienen acceso a su sitio..
El uso de un tercero conocido puede ayudar y perjudicar desde un punto de vista social y de reputación. La ventaja de permitir el inicio de sesión con Facebook o Twitter es que muchos usuarios ya tienen cuentas allí que estarían encantados de usarlo. Otros visitantes pueden ver la integración con estos sitios como una característica negativa y no usar su sitio debido a ello o si es la única opción que se les brinda..
El inicio de sesión de su aplicación web juega un papel vital en la protección de su sitio. El cuidado de proteger su inicio de sesión hará mucho para proteger su sitio, los usuarios de su sitio y su información privada. Para trabajar de forma segura con los inicios de sesión, minimice la cantidad de datos que sus páginas de inicio de sesión y de restablecimiento de contraseña podrían proporcionar a un pirata informático. Además, aplique medidas de seguridad para que sea más difícil adivinar las contraseñas de sus usuarios a través de la fuerza bruta.
Proteger las contraseñas es una preocupación crítica de cualquier sitio. Las contraseñas mal protegidas facilitan el trabajo del pirata informático y pueden terminar con las credenciales de inicio de sesión de su sitio expuestas al público. El uso de contraseñas con hash y con sal hace que el trabajo del hacker sea mucho más difícil. Además, agregar la opción de un segundo paso al proceso de inicio de sesión puede proporcionar más protección para los usuarios de su sitio. También puede optar por utilizar un tercero para gestionar los inicios de sesión en su sitio.