¿Cómo se determina JSESSIONID en esta prueba CSRF?

1

Estoy trabajando en probar la protección CSRF para una de nuestras aplicaciones web. Tenemos un caso de prueba como el siguiente:

<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <form action="https://webapp.example.com/path/to/page.do" method="post">
            <input type="hidden" name="actionTask" value="reject">
            <input type="submit" value="Submit request">
        </form>
    </body>
</html>

Que es una página simple con un campo oculto y un botón de envío. Si el usuario tiene una sesión válida (se registra en la aplicación web), abre esta página CSRF y hace clic en "enviar", la solicitud se envía y lleva al usuario a una página de resultados en la aplicación web.

Esta es una aplicación web basada en JSP que utiliza JSESSIONID para rastrear la sesión de los usuarios (más cookies para autenticación). Cuando rastreo los métodos HTTP, veo que Firefox (el navegador utilizado para probar) está de hecho enviando JSESSIONID como uno de los encabezados. ¿Cómo obtiene Firefox el valor correcto para JSESSIONID?

Nota: Me doy cuenta de que, como Firefox tiene una cookie para una sesión válida con la aplicación, puede usarla. Pero, ¿cómo determina JSESSIONID? Puedo iniciar sesión y cerrar las ventanas del navegador y la página sigue funcionando siempre que mi sesión sea válida. Parece que el servidor le está diciendo al navegador qué es JSESSIONID?

edit1: esta pregunta no es específica de CSRF, sino simplemente cómo el navegador determina JSESSIONID cuando tiene una sesión válida abierta.

    
pregunta Exit42 23.05.2016 - 21:32
fuente

2 respuestas

0
  

¿Pero cómo determina JSESSIONID? Puedo iniciar sesión y cerrar la   Las ventanas del navegador y la página siguen funcionando mientras mi sesión sea   todavía válido. Parece que el servidor le está diciendo al navegador lo que su   JSESSIONID es?

El servidor envía JSESSIONID al navegador en una respuesta http con un encabezado set-cookie.

Aquí hay un ejemplo:

HTTP/1.1 302 Found
Server: nginx/1.4.6 (Ubuntu)
Date: Mon, 23 May 2016 19:48:35 GMT
Content-Type: text/html; charset=utf-8
Connection: close
Location: https://freezerpro/signin
X-UA-Compatible: IE=Edge,chrome=1
Cache-Control: no-cache
Set-Cookie: JSESSIONID=3a64adc78f2dae266c99767c6686bc0d; path=/; HttpOnly
X-Request-Id: d09eafd83135da8ad1f261d67d380c84
X-Runtime: 0.008982
X-Rack-Cache: miss
Content-Length: 95

Y luego, la siguiente solicitud del navegador al servidor tiene el mismo ID de sesión, que lo vincula a la sesión ya establecida:

GET /signin HTTP/1.1
Host: freezerpro
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=3a64adc78f2dae266c99767c6686bc0d
DNT: 1
Connection: close 
    
respondido por el mcgyver5 23.05.2016 - 21:45
fuente
0

Corrígeme si entendí mal la pregunta. Pero esto es lo que he entendido. El navegador envía todos los valores de las cookies al servidor cuando abre este HTML. Esta es la naturaleza predeterminada del navegador para agregar todas las cookies con la solicitud. Si el navegador tiene algunas cookies de un host en particular, las enviará con cada solicitud que apunte al mismo host.

    
respondido por el one 23.05.2016 - 21:56
fuente

Lea otras preguntas en las etiquetas