¿Cómo se envía el ID de sesión de forma segura?

13

Estoy aprendiendo administración de sesiones y tengo dos preguntas para las que no pude encontrar respuestas en la web.

Una vez que el usuario se autentica, el servidor crea el ID de sesión y lo envía al cliente (usuario) en forma de una cookie. Esta cookie se usa posteriormente en las solicitudes que el cliente envía al servidor para identificarse entre otros usuarios.

Ahora, en una sesión HTTPS, las solicitudes enviadas entre el cliente y el servidor están protegidas, ya que las solicitudes del cliente se cifran utilizando la clave pública del servidor, y solo se puede descifrar utilizando la clave privada que solo tiene el servidor .

Pero inicialmente, cuando el servidor envía la información de la cookie al cliente, cualquier persona puede interceptarla, incluso si esta cookie que contiene el ID de sesión está cifrada con la clave privada. Puede ser descifrado por cualquier persona que tenga la clave pública. Entonces, mi pregunta es:

  1. ¿Cómo se asegura el servidor de que la ID de sesión creada por el servidor se envíe de forma segura al cliente?

  2. Me enteré de que el cliente envía la cookie para cada solicitud que realiza al servidor. En una solicitud GET, ¿cómo envía el cliente la información de la cookie, ya que GET no incluye el cuerpo?

pregunta God_Father 01.05.2015 - 14:07
fuente

2 respuestas

15

La conexión entre el cliente y el servidor no utiliza cifrado de clave pública (que solo se usa para el intercambio de clave inicial). Se usa un algoritmo diferente para el cifrado (generalmente un cifrado simétrico), como AES-256-CBC en una conexión TLS 1.2. Por lo tanto, a menos que lo haya interceptado, nadie, excepto el navegador previsto y el servidor original puede descifrar el mensaje. Por lo tanto, la intercepción no es tan fácil como tener la información de la clave pública del servidor.

La cookie no se envía como una solicitud GET. Se agrega a los encabezados como Cookie:[Token]; [Other cookies]; . El tipo de solicitud subyacente es irrelevante para esto. (Sin embargo, el tipo de solicitud predeterminado es GET.)

Le sugeriría que mire el tráfico de la red desde su navegador a un sitio web en el que está conectado y vea qué se está utilizando. (Esto es fácil de hacer en Chrome).

    
respondido por el LvB 01.05.2015 - 14:17
fuente
5

Respuesta 1: Si el servidor utiliza SSL / HTTPS (verificado por un certificado de terceros y no autofirmado), las cookies y las ID de sesión viajan como texto cifrado a través de la red, y si un atacante (Man in the Middle) usa un detector de paquetes, puede No se obtiene ninguna información. No pueden descifrar los datos porque la conexión entre el cliente y el servidor está protegida por un tercero verificado. Por lo tanto, HTTPS sin certificado verificado significa que el servidor y el usuario no pueden asegurarse de que no se haya detectado el ID de la sesión.

significa que todos los datos (es decir, las cookies) deben enviarse y recibirse después de establecer un HTTPS protegido entre el usuario y el servidor y pueden asegurarse de que el ID de la sesión se envíe de forma segura al usuario.

también se utiliza el cifrado asimétrico para intercambiar la clave del cifrado simétrico (que se usa para cifrar datos entre el cliente y el servidor).

para obtener una mejor imagen, haga clic con el botón derecho: abrir imagen en una nueva ventana

Respuesta 2: Las cookies se manejan completamente mediante el encabezado de solicitud en los campos del encabezado HTTP, las cookies en el lado del cliente están codificadas en el encabezado de respuesta 'Cookie' y 'Set-Cookie' y en el lado del servidor están codificadas en el encabezado de solicitud 'Cookie' - $ Ruta variable.

Ejemplo de solicitud de cliente:

GET /index.html HTTP/1.1
Host: www.example.com

Ejemplo de respuesta del servidor:

HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: foo=10
Set-Cookie: bar=20; Expires=Fri, 30 Sep 2011 11:48:00 GMT
... rest  of the response

Aquí, dos cookies ( foo=10 y bar=20 ) se almacenan en el navegador. La segunda expirará el 30 de septiembre. En cada solicitud posterior, el navegador enviará las cookies al servidor:

GET /spec.html HTTP/1.1
Host: www.example.com
Cookie: foo=10; bar=20
Accept: */*
    
respondido por el Ali 01.05.2015 - 14:46
fuente

Lea otras preguntas en las etiquetas