Compartir sesión de forma segura a través de subdominios

2

Por lo tanto, tengo un servicio web que se dividirá en varios subdominios.

Entonces, app1.xyz.com y app2.xyz.com.

Debido a que Safari (la última vez que lo verifiqué) no permite que las cookies se compartan entre subdominios, como otros navegadores, necesito una forma eficiente de mantener a un usuario registrado mientras se encuentran entre los diferentes subdominios, en el mismo sesión.

A primera vista, esto debería ser tan fácil como enviar el session_id en una URL a través de https.

Pero, ¿es esto suficientemente bueno?

Tanto una cookie como una URL se envían a través de https, por lo que existe el mismo riesgo de descifrar el certificado SSL mediante la indagación.

¿Hay algo más acerca del envío del ID de sesión en la URL que puede ser un problema?

Hay una mejor manera, que no se trata de cosas de ingeniería. Usar oAuth me parece excesivo, pero tal vez me equivoque.

    
pregunta Kile 18.06.2015 - 22:15
fuente

1 respuesta

3

Creo que has entendido mal el problema de las cookies en Safari / Chrome. Ambos implementan el RFC correctamente, mientras que Firefox / IE han estado más relajados en el pasado.

Las reglas normales son:

  • La configuración de una cookie para xyz.com no permite que ningún subdominio lo lea.
  • La configuración de una cookie para .xyz.com permite que todos los subdominios la lean.
  • La configuración de una cookie para app1.xyz.com solo permite que el subdominio app1 lo lea, pero no otros subdominios.

Algunos navegadores doblan estas reglas ligeramente, y en su lugar permiten que las cookies sin el prefijo . en su dominio puedan ser leídas por subdominios, independientemente del hecho de que el RFC diga lo contrario. Si recuerdo correctamente, IE / FF solía hacer esto, pero creo que están más en línea en las versiones recientes.

  

A primera vista, esto debería ser tan fácil como enviar el session_id en una URL a través de https. Pero, ¿es esto suficientemente bueno? Tanto una cookie como una URL se envían a través de https, por lo que existe el mismo riesgo de descifrar el certificado SSL al espiar. ¿Hay algo más sobre el envío del session_id en la URL que puede ser un problema?

Nunca debes poner identificadores de sesión en la URL. Hay un montón de razones para esto:

  • Son visibles en la pantalla, por lo que son susceptibles de navegar por los hombros o filtrarse a través de capturas de pantalla compartidas.
  • Se guardan, de forma insegura, en el historial del navegador. Esto podría usarse para recuperar tokens de sesión en un entorno de escritorio multiusuario.
  • Los parámetros de la URL generalmente se registran mediante proxies, balanceadores de carga y servidores web, lo que significa que los tokens de sesión activos se guardan en el registro de sus registros.

Es simplemente una mala práctica enviarlos en URL. Si lo hiciste y yo puse a prueba tu aplicación, ciertamente la marcaría como un problema.

  

Hay una mejor manera, que no se trata de cosas de ingeniería. Usar oAuth me parece excesivo, pero tal vez me equivoque.

Como se indicó anteriormente, no creo que su problema original sea realmente un problema, solo necesita configurar el dominio correcto para la cookie. Una vez que hayas hecho eso, deberías estar bien.

Además, ya que ha mencionado que está usando HTTPS para todo, recomiendo la configuración de la marca Secure en sus cookies para asegurarse de que no se puedan transmitir a través de HTTP de texto sin formato. También debe considerar la configuración de un encabezado HTTP Strict Transport Security para evitar los ataques sslstrip. Pero estas son solo sugerencias adicionales para mejorar la seguridad a bajo costo y no están directamente relacionadas con su pregunta original.

    
respondido por el Polynomial 18.06.2015 - 22:41
fuente

Lea otras preguntas en las etiquetas