Estoy creando una REST-API y es sencillo hacer un inicio de sesión de autenticación BÁSICO. Luego, deje que HTTPS asegure la conexión para que la contraseña esté protegida cuando se use la API.
¿Puede esto considerarse seguro?
Estoy creando una REST-API y es sencillo hacer un inicio de sesión de autenticación BÁSICO. Luego, deje que HTTPS asegure la conexión para que la contraseña esté protegida cuando se use la API.
¿Puede esto considerarse seguro?
Hay algunos problemas con la autenticación básica HTTP:
De esos, usar SSL solo resuelve el primero. E incluso con eso, SSL solo protege hasta que el servidor web: cualquier enrutamiento interno, registro del servidor, etc., verá la contraseña en texto sin formato.
Entonces, como con cualquier cosa, es importante tener en cuenta la imagen completa.
¿HTTPS protege la contraseña en tránsito? Sí.
¿Es suficiente? Por lo general, no. (Quiero decir que siempre no, pero realmente depende de cuál sea su sitio y de qué tan seguro debe ser).
Intente pensarlo de esta manera: cuando inicia sesión en cualquier sitio web usando SSL, lo más probable es que esté pasando la contraseña en texto sin formato a través de HTTPS (por ejemplo, GMail).
La única diferencia que hace Basic-Auth es que nombre de usuario / contraseña se pasa en los encabezados de la solicitud en lugar del cuerpo de la solicitud (GET / POST).
Como tal, usando basic-auth + https no es menos ni más segura que una autenticación basada en formularios a través de HTTPS.
La autenticación básica a través de HTTPS es buena, pero no es completamente segura. De manera similar a cómo funciona Fiddler para la depuración de SSL, un proxy HTTPS corporativo administra la conexión entre el navegador web y el Proxy (cuya dirección IP aparece en los registros de su servidor web). En ese caso, la contraseña HTTPS se descifra y luego se vuelve a cifrar en el proxy corporativo.
Dependiendo de quién está administrando el proxy y cómo se utilizan sus registros, esto puede ser aceptable o malo desde su perspectiva.
Para obtener más información sobre cómo se realiza la interceptación SSL , consulte este enlace:
Cuando el Proxy SSL intercepta una conexión SSL, presenta un certificado de servidor emulado al navegador del cliente. El navegador del cliente emite una ventana emergente de seguridad para el usuario final porque el navegador no confía en el emisor utilizado por ProxySG. Esta ventana emergente no ocurre si el certificado del emisor usado por el Proxy SSL se importa como una raíz confiable en el almacén de certificados del navegador del cliente.
El ProxySG hace que todos los certificados configurados estén disponibles para su descarga a través de su consola de administración. Puede pedir a los usuarios finales que descarguen el certificado del emisor a través de Internet Explorer o Firefox e instalarlo como una CA de confianza en el navegador de su elección. Esto elimina la ventana emergente de certificado para certificados emulados ...
Algunas empresas solucionan el problema de la ventana emergente de certificado mencionado anteriormente implementando los certificados raíz (del Proxy) en cada estación de trabajo a través de GPO. Aunque esto solo afectará al software que utiliza el almacén de certificados de Microsoft. El software como Firefox debe actualizarse de manera diferente.
Observa la necesidad de autenticar al cliente y pregunta sobre la seguridad de la autenticación básica HTTP, a través de SSL. Esto es para lo que se diseñó SSL y funcionará bien siempre que la contraseña sea buena. Si realmente está configurando esto para un solo cliente, es fácil de asegurarse eligiendo una contraseña aleatoria larga, p. 12 caracteres utilizando una buena fuente de aleatoriedad u otras técnicas discutidas en este sitio.
Su cliente también necesita asegurarse de que tiene el certificado correcto para el servidor. En la situación como la que describe, estará bien usar un certificado autofirmado como se describe en la página de Python ssl a la que se hace referencia.
Depende completamente de cuán seguro debe ser. La autenticación básica a través de SSL seguirá enviando credenciales en texto sin formato, lo que significa que solo tiene una capa de protección.
Sería mejor que escribiera un hash en la contraseña con un nonce, o mejor aún, use el modelo de notificaciones que pasa la autorización a un tercero de confianza.
Muchos sitios grandes y populares utilizan la autenticación básica (u otra basada en formularios) sobre HTTPS. Por lo general, recibe un "suspiro" de personas preocupadas por la seguridad. ¿Puede aplicar hash a la contraseña en el lado del cliente y enviar el hash en su lugar? Eso elevaría el listón un poco más.
Dicho esto, generalmente se considera aceptable, con la condición de que la página de destino que aloja el formulario de inicio de sesión también sea HTTP / S. En su caso de una API RESTful, probablemente no tenga una página de destino, así que está bien. Si puede, verifique su aplicación con algunas herramientas de seguridad gratuitas como Watcher y Skipfish.
Yo mismo estoy usando esto para muchas cosas, y siempre que no ignore ninguna advertencia de TLS del navegador, debería estar bien.
TLS funciona por debajo de HTTP, por lo que cualquier dato transmitido a través de HTTP se cifrará. Será tan seguro como enviar cualquier formulario de contraseña.
Sin embargo, en lugar de usar un certificado autofirmado, sugeriría usar Let's Encrypt. Proporcionan certificados gratuitos y Microsoft, Mozilla, etc. confían en ellos, por lo que no darán una advertencia de TLS en el navegador. Creo que es mejor usar esto en lugar de un certificado autofirmado; si alguna vez ve un error de TLS, sabe que es real y no solo porque su certificado está autofirmado.
Otro argumento no mencionado (supongo) hasta ahora es el hecho de que muchos dispositivos móviles como los teléfonos inteligentes no permiten que el usuario verifique el certificado cuando realiza la autenticación básica a través de HTTPS en el navegador. Eso significa que, a diferencia de la autenticación basada en formularios, no puede omitir la ventana emergente de autenticación básica, que es un diálogo modal en la mayoría de las plataformas móviles para verificar el certificado antes de ingresar sus credenciales. Esto podría suponer un riesgo cuando un atacante utiliza un certificado válido.
Aquí hay un poco más de contexto para la historia. Al igual que otros dijeron que la autenticación básica sobre TLS funciona bien si puede vivir con algunas limitaciones.
Usado en el lado del cliente , probablemente necesite lidiar con la administración de sesiones, que es bastante difícil con la autenticación básica.
En el backend , la autenticación básica funciona bien, pero se basa completamente en TLS por confidencialidad e integridad. Es similar a la autenticación basada en tokens. Si necesita algo más sólido, considere usar un esquemas de firma o una autenticación de cliente TLS.