Come viene determinato JSESSIONID in questo test CSRF?

1

Sto lavorando alla verifica della protezione CSRF per una delle nostre applicazioni web. Abbiamo un caso di test come il seguente:

<!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>

Che è una semplice pagina con un campo nascosto e pulsante di invio. Se l'utente ha una sessione valida (è connesso all'app Web), apre questa pagina CSRF e fa clic su "Invia", la richiesta viene inviata e porta l'utente a una pagina dei risultati nell'app Web.

Questa è un'app Web basata su JSP che utilizza JSESSIONID per tracciare la sessione degli utenti (oltre ai cookie per l'autenticazione). Quando rintraccio i metodi HTTP, vedo che Firefox (il browser utilizzato per testare) sta infatti presentando JSESSIONID come una delle intestazioni. In che modo Firefox ottiene il valore corretto per JSESSIONID?

Nota: mi rendo conto che dal momento che Firefox ha un cookie per una sessione valida con l'applicazione, può usarlo. Ma come determina JSESSIONID? Posso accedere e chiudere le finestre del browser e la pagina funziona ancora finché la mia sessione è ancora valida. Sembra che il server stia dicendo al browser qual è il suo JSESSIONID?

edit1: questa domanda non è specifica per CSRF, ma piuttosto semplicemente come il browser determina JSESSIONID quando ha una sessione valida aperta.

    
posta Exit42 23.05.2016 - 21:32
fonte

2 risposte

0

But how does it determine JSESSIONID? I can log in and close the browser windows and the page still works as long as my session is still valid. Seems the server is telling the browser what its JSESSIONID is?

Il server invia JSESSIONID al browser in una risposta http con un'intestazione set-cookie.

Ecco un esempio:

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

E poi la richiesta successiva dal browser al server ha lo stesso sessionID, collegandolo alla sessione già stabilita:

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 
    
risposta data 23.05.2016 - 21:45
fonte
0

Correggimi se ho frainteso la domanda. Ma ecco cosa ho capito. Il browser invia tutti i valori dei cookie al server quando apri questo codice HTML. Questa è la natura predefinita del browser per aggiungere tutti i cookie con la richiesta. Se il browser ha alcuni cookie di un particolare host, invierà questi con ogni richiesta che punta allo stesso host.

    
risposta data 23.05.2016 - 21:56
fonte

Leggi altre domande sui tag