Come viene inviato l'ID di sessione in modo sicuro?

14

Sto imparando la gestione delle sessioni e ho due domande per le quali non sono riuscito a trovare risposte sul web.

Una volta che l'utente è autenticato, il server crea l'ID sessione e lo invia al client (utente) sotto forma di cookie. Questo cookie viene successivamente utilizzato nelle richieste che il client invia al server per identificarsi tra gli altri utenti.

Ora in una sessione HTTPS, le richieste inviate tra il client e il server sono protette, poiché le richieste del client vengono crittografate utilizzando la chiave pubblica del server e possono essere decifrate solo utilizzando la chiave privata che il server ha solo .

Ma inizialmente quando il server invia le informazioni sui cookie al client, potrebbe essere intercettato da chiunque, anche se questo cookie che contiene l'ID di sessione viene crittografato utilizzando la chiave privata. Potrebbe essere decodificato da chiunque abbia la chiave pubblica. Quindi, la mia domanda è:

  1. In che modo il server si assicura che l'ID di sessione creato dal server sia inviato in modo sicuro al client.

  2. Ho appreso che il client invia il cookie per ogni richiesta effettuata al server. In una richiesta GET, in che modo il client invia le informazioni sui cookie, poiché GET non include il corpo?

posta God_Father 01.05.2015 - 14:07
fonte

2 risposte

15

La connessione tra il client e il server non utilizza la crittografia a chiave pubblica (che viene utilizzata solo per lo scambio di chiavi iniziale). Un algoritmo diverso viene utilizzato per la crittografia (in genere una crittografia simmetrica), ad esempio AES-256-CBC su una connessione TLS 1.2. Quindi, a meno che non l'abbia intercettato, nessuno tranne il browser previsto e il server originale possono decodificare il messaggio. Quindi l'intercettazione non è facile come avere le informazioni sulla chiave pubblica dal server.

Il cookie non viene inviato come richiesta GET. Viene aggiunto alle intestazioni come Cookie:[Token]; [Other cookies]; . Il tipo di richiesta sottostante è irrilevante per questo. (Tuttavia, il tipo di richiesta predefinito è GET.)

Ti suggerisco di guardare il traffico di rete dal tuo browser a un sito web al quale sei connesso e vedere cosa viene usato dove. (Questo è facile da fare in Chrome.)

    
risposta data 01.05.2015 - 14:17
fonte
5

Risposta 1: se il server utilizza SSL / HTTPS (verificato da terze parti - non certificato autofirmato), i cookie e gli ID di sessione viaggiano come testo cifrato sulla rete, e se un utente malintenzionato (Man in the Middle) utilizza uno sniffer di pacchetti, possono non ottenere alcuna informazione Non possono decrittografare i dati perché la connessione tra client e server è protetta da una terza parte verificata. Quindi HTTPS senza certificato verificato significa che il server e l'utente non possono assicurarsi che l'ID di sessione non venga annusato.

significa che ogni dato (cioè i cookie) deve essere inviato e ricevuto dopo aver stabilito un HTTPS protetto tra utente e server e può assicurarsi che l'ID sessione sia inviato in modo sicuro all'utente.

anche il cifrario asimmetrico serve solo per lo scambio di chiavi di cifratura simmetrica (usato per cifrare i dati tra client e server).

per un'immagine migliore clicca con il tasto destro: apri l'immagine in una nuova finestra

Risposta 2: I cookie sono gestiti interamente dall'intestazione della richiesta nei campi dell'intestazione HTTP, i cookie nel lato client sono codificati nell'intestazione di risposta 'Cookie' e 'Set-Cookie' e sul lato server sono codificati nell'intestazione della richiesta 'Cookie' - $ Path variabile.

Esempio di richiesta del cliente:

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

Risposta di esempio dal server:

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

Qui, due cookie ( foo=10 e bar=20 ) sono memorizzati nel browser. Il secondo scadrà il 30 settembre. In ogni richiesta successiva il browser invierà i cookie al server:

GET /spec.html HTTP/1.1
Host: www.example.com
Cookie: foo=10; bar=20
Accept: */*
    
risposta data 01.05.2015 - 14:46
fonte

Leggi altre domande sui tag