Con HTTPS, ¿puedo saber el dominio del cliente para la autenticación con mi API

2

Me está costando mucho encontrar el mejor título para esta pregunta, pero déjame explicarte mi situación:

Tengo una aplicación de sala de chat como servicio similar a Intercom. Cualquiera puede cargar el chat en un iframe y mostrarlo en su sitio. Quiero hacerlo para que los creadores del sitio puedan solicitar un 'espacio de nombres', es decir acme inc y luego pasarlo como parámetro en la URL iframe src .

El problema es que cualquiera puede unirse al chat de la compañía simplemente escribiendo el nombre como parámetro en su propia URL de iframe. Necesito una forma de verificar que cuando un host se conecta a mi aplicación con un "nombre" param, que sea el host correcto y no un spoofer.

Por cierto, todo esto está en JavaScript, pero como se trata de seguridad y no de desbordamiento de pila, no espero que alguien me dé el código correcto, solo conceptos importantes. Gracias.

    
pregunta max pleaner 06.05.2017 - 00:20
fuente

1 respuesta

2

¿Has visto Tokens de macarrón ? Siempre quise usarlos para los procesos de autorización, pero no tuve la oportunidad, sin embargo, parecen ser una coincidencia potencial para su caso de uso.

Aquí está el documento de investigación y aquí está una herramienta de demostración muy simple .

Por ejemplo, podría agregar varias advertencias, como la IP del cliente u otra huella digital similar para que un macarrón robado no se pueda usar en ningún otro lugar. O tal vez puede restringir el tiempo de caducidad a 1 minuto o incluso requerir un macarrón por solicitud (es decir, ¿un mensaje de chat o algo así?).

Desafortunadamente, por alguna razón, no parece haber una amplia adopción de este concepto tan genial, por lo que muchas de las cosas son antiguas y no están seguras de cómo se mantienen las diferentes bibliotecas, por lo que la utilidad podría ser limitada para usted, dependiendo de en tu caso.

Sin embargo, la técnica más común que he visto es básicamente el uso de cookies (con tiempos de caducidad cortos, dependiendo de su caso de uso) para mantener los identificadores de sesión del lado del servidor, que puede usar para controlar el acceso. Solo asegúrate de usar HTTPS para enviarlos.

Editar para abordar el comentario:

Aquí hay una biblioteca de JavaScript para macarrones .

Lo que quise decir con huellas dactilares fue obtener algún tipo de información del usuario (cuando inicia sesión) y agregándolas como una advertencia de macarrón . por ejemplo

  • Agregue un correo electrónico válido para ese "espacio de nombres", de modo que el usuario X en el espacio de nombres N no pueda saltar al espacio de nombres M

  • Cree una lista blanca con el rango conocido de IP para cada cliente que tenga autorización para acceder a su chat. Puede intentar determinar la IP a través de la filtración de WebRTC pero eso requiere un navegador que admita WebRTC, y la fuga podría solucionarse más adelante, dependiendo del navegador.

La respuesta para determinar la IP del cliente dependerá de su caso de uso particular. Allí hay muchas soluciones diferentes que tienen una proporción variable de relación costo / beneficio que solo usted puede evaluar.

Por ejemplo, podría usar un servidor Node, pero si aún no tiene uno, esto puede ser costoso en términos de nueva infraestructura, código, etc. Tal vez tenga un servidor Tomcat que ya pueda usar para encontrar el IP y se puede conectar a eso, etc. Pero todos tienen diferentes implicaciones de seguridad y costos asociados, por lo que esta sería una pregunta amplia.

Editar:

También he leído algunos comentarios sobre lo inseguros que son los JWT si los está utilizando para las sesiones del lado del cliente. Así que podría agregar esto en caso de que alguien lo recomiende.

Este artículo: JSON Web Los tokens deben evitarse alentados a un debate entre las personas que trabajan en el campo, por ejemplo, este comentario por Thomas Ptacek.

Extracto pequeño:

  

El problema con JWT en particular es que no trae nada a   La mesa, pero viene con mucha complejidad aterradora. Peor,   Usted como desarrollador no verá esa complejidad: JWT parece un simple   ficha con una bolsa de atributos mágicamente protegida criptográficamente   interfaz. Los problemas están todos detrás de las escenas.

    
respondido por el Acapulco 06.05.2017 - 01:05
fuente

Lea otras preguntas en las etiquetas