This site is the archived OWASP Foundation Wiki and is no longer accepting Account Requests.
To view the new OWASP Foundation website, please visit https://owasp.org
Difference between revisions of "Guía de Referencias sobre Autentificación"
Eugeniabahit (talk | contribs) |
Eugeniabahit (talk | contribs) |
||
Line 194: | Line 194: | ||
Para más información, ver: [https://en.wikipedia.org/wiki/Transport_Layer_Security#Client-authenticated_TLS_handshake Client-authenticated TLS handshake] | Para más información, ver: [https://en.wikipedia.org/wiki/Transport_Layer_Security#Client-authenticated_TLS_handshake Client-authenticated TLS handshake] | ||
+ | |||
+ | |||
+ | == Autentificación y mensajes de error == | ||
+ | |||
+ | En el caso de las funcionalidades de autentificación, los mensajes de error implementados de forma incorrecta pueden ser utilizados con el propósito de obtener y almacenar identificadores de usuario y contraseñas. Una aplicación, debería responder (tanto en los encabezados HTTP como en el contenido HTML) de forma genérica. | ||
+ | |||
+ | |||
+ | ==== Respuestas de autentificación ==== | ||
+ | |||
+ | Una aplicación debería responder mensajes de error genéricos independientemente de si era incorrecto el identificador de usuario o la encontraseña. Tampoco debería dar información sobre el estado de una cuenta existente. | ||
+ | |||
+ | |||
+ | ==== Ejemplo de respuestas incorrectas ==== | ||
+ | |||
+ | *"Inicio de sesión para el usuario foo: contraseña incorrecta" | ||
+ | *"Falló el inicio de sesión: usuario no válido" | ||
+ | *"Falló el inicio de sesión: cuenta deshabilitada" | ||
+ | *"Falló el inicio de sesión: usuario inactivo" | ||
+ | |||
+ | |||
+ | ==== Ejemplo de respuestas correctas ==== | ||
+ | |||
+ | *"Falló el inicio de sesión: Usuario o contraseña incorrectos" | ||
+ | |||
+ | La respuesta correcta no debería indicar si el identificador de usuario o la contraseña es el parámetro incorrecto y por lo tanto, inferir un identificador de usuario válido. | ||
Revision as of 16:52, 2 August 2015
Last revision (mm/dd/yy): 08/2/2015 IntroducciónLa autentificación es el proceso de verificar que un individuo, entidad o sitio Web es quien dice ser. En el contexto de una aplicación Web, la autentificación, comúnmente es realizada mediante el envío de un nombre de usuario o ID y, uno o más datos de información privada que solo un determinado usuario debe conocer.
Reglas generales de autentificaciónID de usuarioAsegúrese de que sus nombres/identificadores de usuarios no sean sensibles a mayúsculas y minúsculas. El usuario 'smith' y el usuario 'Smith' deberían ser el mismo usuario. Dirección de correo electrónico como ID de usuarioMuchos sitios utilizan la dirección de correo electrónico como identificador de usuario, lo cual es un buen mecanismo para segurar un identificador único por cada usuario sin agregarle a éstos la carga de tener que recordar un nuevo nombre de usuario. Sin embargo, muchas aplicaciones Web no tratan correctamente las direcciones de correo electrónico, debido a conceptos equivocados sobre lo que constituye una dirección de correo electrónico válida. Specifically, it is completely valid to have an mailbox address which:
La parte local es la parte de la dirección de correo electrónico que se encuentra a la izquierda del caracter '@'. El dominio es la parte de la dirección de correo electrónico que se encuentra a la derecha del caracter '@' y consiste en cero o más etiquetas unidas por el caracter de punto. Al momento de estar escribir este artículo, el RFC 5321 es el estándar actual que define el protocolo SMTP y lo que constituye una dirección de correo electrónico válida. Por favor, tenga en cuenta que las direcciones de correo electrónico deberías ser consideradas datos públicos. En aplicaciones de alta seguridad, podrías asignarse los nombres de usuario y ser secretos en lugar de ser datos públicos definidos por el usuario.
ValidaciónMuchas aplicaciones Web contienen expresiones regulares informáticamente muy costosas e inexactas contain computationally expensive and inaccurate regular expressions para intentar validar las direcciones de correo electrónico. Cambios recientes generaron que el número de falsos negativos se viera incrementado, particularmente debido a:
Siguiendo el RFC 5321, las mejores prácticas para la validación de una dirección de correo electrónico deberían ser:
Para asegurarse que una dirección de entrega sea verídica, la única forma es enviar un correo electrónico al usuario y que éste deba tomar alguna acción para confirmar que lo ha recibido. Más allá de confirmar que la dirección de correo electrónico es válida y reciba los mensajes, esto también proporciona una confirmación positiva de que el usuario tiene acceso al buzón de correo y es probable esté autorizado a usarlo. Esto no significa que otros usuarios no tengan acceso al mismo buzón de correo, cuando por ejemplo el usuario utiliza un servicio que genera una dirección de correo electrónico deshechable.
NormalizaciónComo la parte local de las direcciones de correo electrónico son, de hecho, sensibles a mayúsculas y minúsculas, es importante almacenar y comparar las direcciones de correo electrónico correctamente. Para normalizar la entrada de una dirección de correo electrónico, debería convertir la parte del dominio SOLO a minúsculas. Desafortunadamente, esto hace y hará a la entrada, más difícil de normalizar y de coincidir correctamente con los intentos del usuario. Es razonable aceptar solo una única capitalización de diferentes alternativas para direcciones de correo electrónico idénticas. Sin embargo, en este caso es crítico para:
Implementar controles adecuados de fortaleza de contraseñaUna de las principales preocupaciones cuando se utilizan contraseñas para la autentificación, es la fortaleza de las contraseñas. Una política de contraseñas "fuertes" hace que sea difícil o incluso improbable adivinar la contraseña a través de medios manuales o automatizados. Las siguientes características definen una contraseña fuerte:
AdvertenciaLas siguientes indicaciones están disputadas. Por favor, vea la presentación de OWASP (en inglés), "Your Password Complexity Requirements are Worthless - OWASP AppSecUSA 2014" para más información.
Longitud de la contraseñaLas contraseñas más largas proporcionan una mayor combinación de caracteres y en consecuencia hacen que sea más difícil de adivinar para un atacante.
Mientras que la longitud mínima forzada puede causar problemas para la memorización de la contraseña en algunos usuarios, las aplicaciones deberían alentarlos a establecer frases de paso o passphrases (frases o combinaciones de palabras) que pueden ser mucho más largas que las contraseñas típicas y mucho más fáciles de recordar.
Complejidad de la contraseñaLas aplicaciones deberían imponer reglas de complejidad de contraseñas para evitar las contraseñas fáciles de adivinar. Los mecanismos de contraseñas deberían permitir al usuario, poder tipear casi cualquier caracter como parte de su contraseña, incluyendo el caracter de espacio. La contraseñas deberían, obviamente, ser sensibles a mayúsculas y minúsculas a fin de incrementar la complejidad de las mismas. Ocasionalmente, encontramos sistemas donde las contraseñas no son sensibles a mayúsculas y minúsculas, frecuentemente debido a problemas de sistemas heredados como los viejos ordenadores centrales que no tenían contraseñas sensibles a mayúsculas y minúsculas.
Topologías de contraseña
Información adicional
Implementar un mecanismo de recuperación de contraseña seguroEs común que una aplicación tenga un mecanismo que provea al usurio un medio para acceder a su cuenta en caso de que olvide su contraseña. Por favor, para más detalles sobre esta característica, vea Forgot Password Cheat Sheet (en inglés).
Almacenar contraseñas de forma seguraEs fundamental para una aplicación, almacenar contraseñas usando la técnica criptográfica correcta. Para conocer más sobre este mecanismo, vea Password Storage Cheat Sheet (en inglés).
Transmitir contraseñas sólo sobre TLS u otro transporte fuerteVer: Transport Layer Protection Cheat Sheet (en inglés) La página de inicio de sesión y todas las páginas autentificadas subsiguientes, deberían ser accedidas exclusivamente sobre TLS u otro transporte fuerte. La página de inicio de sesión principal, conocida como "landing page", debe ser servida sobre TLS u otro transporte fuerte. Si no se utiliza TLS u otro transporte fuerte para la landing page de inicio de sesión, se permite a un atacante modificar el action del formulario de inicio de sesión, generando que las credenciales del usuario sean enviadas a una ubicación arbitraria. Si no se utiliza TLS u otro transporte fuerte para las páginas autentificadas que se habilitan luego del inicio de sesión un atancante puede ver la ID de sesión sin cifrar y comprometer la sesión autentificada del usuario.
Solicitar volver a autentificarse para funciones sensiblesCon el fin de mitigar ataques CSRF y de secuestro de sesión (hijacking), es importante solicitar las credenciales actuales de una cuenta en los siguientes casos:
Sin esta contramedida, un atacante puede ser capaz de ejecutar transacciones sensibles a través de un ataques CSRF o XSS sin necesidad de conocer las credenciales actuales del usuario. Adicionalmente, un atacante puede obtener, temporalmente, acceso físico al navegador del usuario o robar su ID de sesión para tomar el control de la sesión del usuario.
Utilizar la autentificación por múltiples factoresLa autentificación por múltiples factores (MFA por las siglas en ingles de "Multi-factor authentication") es el uso de más de un factor de autentificación para iniciar sesión o procesar una transacción, mediante:
Los esquemas de autentificación como las contraseñas de un solo uso (OTP por las siglas en inglés de "One Time Passwords") implementadas utilizando un token físico (hardware) también pueden ser un factor clave en la lucha contra ataques tales como los ataques CSRF y malware del lado del cliente. Un considerable número de los token de hardware para MFA disponibles en el mercado, permiten una buena integración con las aplicaciones Web. Ver: [2] (en inglés).
Autentificación TLSLa autentificación TLS, también conocida como autentificación TLS authentication mutua, consiste en que ambos, navegador y servidor, envíen sus respectivos certificados TLS durante el proceso de negociación TLS (handshaking). Así como se puede validar la autenticidad de un servidor mediante el certificado y, preguntar a una Autoridad de Certificación conocida (CA, por las siglas en inglés de "Certificate Authority") si la certificación es válida, el servidor puede autentificar al usuario recibiendo un certificado desde el cliente y validándolo contra una CA o su propia CA. Para hacer esto, el servidor debe proveer al usuario de un certificado generado específicamente para él, asignado valores que puedan ser usados para determinar que el usuario debe validar el certificado. El usuario instala los certificados en el navegador y los usa para el sitio Web.
Autentificación y mensajes de errorEn el caso de las funcionalidades de autentificación, los mensajes de error implementados de forma incorrecta pueden ser utilizados con el propósito de obtener y almacenar identificadores de usuario y contraseñas. Una aplicación, debería responder (tanto en los encabezados HTTP como en el contenido HTML) de forma genérica.
Respuestas de autentificaciónUna aplicación debería responder mensajes de error genéricos independientemente de si era incorrecto el identificador de usuario o la encontraseña. Tampoco debería dar información sobre el estado de una cuenta existente.
Ejemplo de respuestas incorrectas
Ejemplo de respuestas correctas
La respuesta correcta no debería indicar si el identificador de usuario o la contraseña es el parámetro incorrecto y por lo tanto, inferir un identificador de usuario válido.
Recursos adicionalesUn PDF del Cheatsheet en inglés puede obtenerse aquí: https://magic.piktochart.com/output/7003174-authentication-cheat-sheet
Autores y Editores principalesEoin Keary eoinkeary[at]owasp.org
|