TLS para asegurar la autenticación HTTP básica

2

La Autenticación básica, incluidos los tokens de portador, depende del uso de TLS para evitar que los intrusos accedan a sus credenciales o tokens confidenciales. Pero creo que hay un elefante en la habitación de lo que nadie habla.

Los usuarios a menudo solo escriben "www.somesite.com" en lugar de " enlace ". Cuando no especifique el protocolo, el navegador del cliente probará primero la conexión HTTP predeterminada, sin cifrar.

El problema es que el usuario básicamente solicita que se realice una conexión no cifrada al servidor porque ese es el valor predeterminado cuando no se especifica ningún protocolo. El navegador podría incluir potencialmente información confidencial en los encabezados de solicitud, incluidas las credenciales de Autenticación Básica, Tokens (e incluso Cookies que no están configuradas como "Seguras")

Para los clientes de API que envían tokens, la situación es similar, pero parcialmente mitigada por aplicaciones de cliente bien escritas que

  1. En realidad solo use el puerto cifrado SSL para conectarse, y
  2. El desarrollador realmente dio vuelta a "Verificar el certificado SSL" Opción en antes de que publique su aplicación.

Pienso en configurar un proxy MITM en mi red doméstica para comenzar a verificar y registrar las aplicaciones que uso. En particular, quiero falsificar algunos registros de DNS y ver si las aplicaciones realmente obstaculizan el envío de sus credenciales / tokens al servidor incorrecto.

Personalmente, hubiera preferido que se especificara que JWT se enviara solo en una cookie SEGURA, en lugar de en los encabezados ... ¿Alguien aquí cree que mi preocupación no está justificada?

EDITAR: Para aclarar: no estoy tan preocupado por la debilidad de SSL o los ataques contra DNS, estoy más preocupado por las credenciales que se exponen porque los clientes terminan enviándolo a través de conexiones no cifradas en cualquier caso, ya sea debido al usuario mal comportamiento o porque el cliente simplemente sigue las redirecciones a los puertos SSL pero solo después de enviar las credenciales del usuario. Al diseñar las API, a partir de ahora agregaré una escucha en el puerto sin cifrar. Si recibe algún token en ese puerto, lo hará

  1. No redirigir, y
  2. invalidar las credenciales, y
  3. enviar al usuario una advertencia.

Es de esperar que los desarrolladores que escriben aplicaciones que consumen estas API obtengan la pista. ¿La inclusión en la lista negra de la propiedad intelectual durante unas pocas horas sería demasiado dura?

P.S. Nota: con las cookies seguras todavía dependemos de que el navegador se implemente correctamente.

    
pregunta Johan 04.10.2016 - 14:52
fuente

3 respuestas

3
  

el navegador del cliente primero intentará con la conexión HTTP sin cifrar predeterminada, lo que posiblemente incluirá el encabezado de Autorización si el navegador tiene estos detalles.

Creo que esta suposición es incorrecta : el navegador distingue entre http: // y https: //, es decir, las credenciales ingresadas en https: // no se incluirán al acceder a http: // y viceversa. Esto significa que el navegador solo incluirá las credenciales para la autenticación básica en http: // si el usuario ha ingresado las credenciales antes en http: //. Y el navegador solo solicitó las credenciales en http: // si el servidor emitió un 401 (se requiere autenticación) en http: //. Si el servidor simplemente redirige a https: // y solo emite el 401 allí, entonces el navegador nunca solicitará las credenciales en http: // y, por lo tanto, no almacenará las credenciales para http: // y no incluirá las credenciales en http: //.

    
respondido por el Steffen Ullrich 04.10.2016 - 16:24
fuente
1

Cualquier autenticación basada en token tiene un problema con los ataques MiTM. Los estándares de token no incluyen ningún mecanismo para evitarlos.

Eso significa que cada aplicación debe tener esto en cuenta. Puede reducir el riesgo manteniendo la vida útil del token muy corta o puede agregar un mecanismo del lado del servidor para saber si el token proviene del cliente original.

De esta manera, prácticamente todos los ejemplos de autenticación de token que ve son incorrectos. O al menos falta este detalle crucial.

Así que sí, en general tienes toda la razón.

    
respondido por el Julian Knight 04.10.2016 - 15:15
fuente
0

En primer lugar, La autenticación básica HTTP y REST son ambos sin estado. Significado: es responsabilidad exclusiva del Cliente gestionar la sesión. A menos que se use para la comunicación Servidor a Servidor, la autenticación HTTP básica con REST es solo una Combo incorrecto . Yo sugeriría cambiar su método de autenticación. consulte la Sección de autenticación en la Respuesta aceptada aquí

Para abordar la pérdida de nombre de usuario / contraseña, mi sugerencia será:

  • haga que el Servicio API se ejecute por separado en enlace ( enlace no es accesible)

  • tiene un cliente API de JavaScript (o su script favorito) incorporado en la página web ( enlace ) para que el cliente API se conecte a ( enlace ) para establecer la conexión API en lugar del navegador.

respondido por el JOW 06.10.2016 - 17:03
fuente

Lea otras preguntas en las etiquetas