¿Exponer un ID de sesión crea riesgos de seguridad?

0

Estoy buscando hacer un inicio de sesión único entre varios dominios, ya que no puedes almacenar cookies en otros dominios de un sitio web, estoy usando etiquetas img con un enlace href a cada sitio web ( por ejemplo: example.com/setsessionid?id=XXXX )

Tengo 2 problemas de seguridad:

  1. Cuando se crea el img en el inicio de sesión, el enlace que incluye el ID de sesión se revela al cliente. ¿Es esto un riesgo?

  2. En los otros dominios, el cliente puede escribir el enlace setsessionid e ingresar su propio ID de sesión (esto parece un gran riesgo, ya que podrían adivinar al azar la sesión de alguien y secuestrarla)

    / li>
  3. SI cualquiera de los dos es un riesgo de seguridad, ¿cómo podría resolverlo?

Notas :

  • Estoy usando este método
  • Esta es una aplicación única que aloja múltiples dominios.
pregunta mateos 08.02.2017 - 14:33
fuente

2 respuestas

2
  

¿La exposición de una ID de sesión crea un riesgo de seguridad?

No necesariamente. Usted está exponiendo los identificadores de sesión al navegador cada vez que almacena un identificador de sesión en una cookie. Así es como funcionan las sesiones: el navegador debe conocer el ID de sesión para poder enviarlo de nuevo al servidor. La pregunta es cómo estás exponiendo tu ID de sesión. Si lo estás enviando en cookies, está bien, todos lo hacen. Es un riesgo mayor si envía el ID de sesión como un parámetro de URL en una solicitud GET (como lo hace cuando usa su solución de imagen), porque el ID de sesión puede terminar en varios lugares que no esperaba (proxy) registros, registros del servidor, historial del navegador, etc.).

  

Estoy buscando hacer un inicio de sesión único entre varios dominios, ya que no puedes almacenar cookies en otros dominios de un sitio web, estoy usando etiquetas img con un enlace href a cada sitio web (por ejemplo: ejemplo). com / setsessionid? id = XXXX)

Hay otra forma de hacerlo (ver cómo funciona el protocolo OAuth) que implica algunas redirecciones HTTP inteligentes y básicamente funciona así:

  1. Construye tu página de inicio de sesión que hace autenticación. Haga que acepte un identificador de cliente y un aleatorio suficientemente largo.
  2. Cada uno de sus otros dominios se redirecciona a esa página de inicio de sesión cuando un usuario desea iniciar sesión, utilizando su identificación de cliente y una fuente aleatoria, que deben almacenar.
  3. El servicio de inicio de sesión le permite al usuario iniciar sesión, y cuando el nombre de usuario y la contraseña son correctos, se redirige a un -url "registrado correctamente" en el dominio del cliente. El servicio de inicio de sesión sabe a dónde redirigir porque el dominio del cliente pasó el ID de cliente, que puede usar para buscar dónde redirigir. El servicio de inicio de sesión envía algunos parámetros, como la identificación de usuario del usuario que inició sesión y el punto de acceso aleatorio (sin cambios).
  4. El "inicio de sesión exitoso" -url de nuevo en el dominio del cliente debe aceptar y verificar el nonce aleatorio que se envió originalmente. Si los nonces no coinciden, no debe aceptar la solicitud. De lo contrario, puede asumir que el servicio de inicio de sesión autenticó correctamente al usuario y puede crear una cookie de sesión autenticada para su propio dominio.

Dependiendo de si desea o no proporcionar un inicio de sesión único, el servicio de inicio de sesión puede configurar su propia cookie de autenticación, de modo que cuando el segundo dominio redirecciona a la página de inicio de sesión, la cookie se envía y el servicio de inicio de sesión puede redirigir a la url de éxito inmediatamente sin pedir nombre de usuario y contraseña.

Esto es extensible, por ejemplo, también funciona cuando se desacopla el servicio de inicio de sesión del resto de su sistema y lo mueve a un servicio de nube en Honolulu. Y una vez que lo haya creado, puede usarlo para permitir que cualquier aplicación web se autentique utilizando su base de datos de usuarios, sin importar dónde esté alojado, simplemente agregue un nuevo ID de cliente y redireccione la URL a su servicio de inicio de sesión.

También puede hacer que sea más seguro si el servicio de inicio de sesión habla directamente con el dominio del cliente, por ejemplo, para que el dominio del cliente se autentique al servicio de inicio de sesión (por ejemplo, no a través del navegador del usuario, sino del servidor al servidor). además de pasar el nonce aleatorio, en su caso, esto es realmente fácil ya que el servicio de inicio de sesión y todos los demás servicios están alojados en la misma máquina, por lo que simplemente puede configurar algunos indicadores en el backend de la base de datos o crear un archivo en el sistema de archivos. .

También tenga en cuenta que el sistema que describí solo es seguro si se puede acceder al servicio de inicio de sesión a través de https, porque de lo contrario, un MITM puede simplemente robar la fuente aleatoria y usarla para autenticarse. Pero, obviamente, eso es algo inteligente que hacer de todos modos, porque si no cifra la página de inicio de sesión, un MITM también puede leer el nombre de usuario y la contraseña que el usuario envía de forma clara.

    
respondido por el Pascal 08.02.2017 - 17:01
fuente
1

Sí, es un riesgo de seguridad. básicamente le está dando al usuario una clave de inicio de sesión temporal para usar en el otro dominio. Esa clave puede ser robada y utilizada por un tercero malintencionado.

No puede confiar en nada que haya ido al navegador del cliente y viceversa. Si confías en que la ID de sesión está "oculta" en la URL de la imagen para saber que es Alice y no Bob o Claire, estás condenado.

Lo que debes hacer es hacer que ambos servidores se comuniquen entre sí detrás de la escena. Ya que ambas máquinas están bajo su control, puede pedirles que confíen entre sí.

Entonces, cuando Alice inicia sesión en el servidor Omicron, Omicron evalúa Theta que Alice ha iniciado sesión desde IP 0.0.0.0 y su ID de sesión es xx: xx: xx: xx: xx

También puede usar un dominio agregador para emular una cookie cross domain .

Como mencionó que ambos dominios están en la misma máquina, tiene muchas opciones para compartir la información de inicio de sesión:

  • Un archivo con el ID de sesión del usuario.
  • Una entrada de base de datos.
respondido por el Mindwin 08.02.2017 - 14:58
fuente

Lea otras preguntas en las etiquetas