Domanda:
Perché il passaggio dell'ID di sessione come parametro URL non è sicuro?
Jonathan Egerton
2012-04-23 23:37:22 UTC
view on stackexchange narkive permalink

Di recente ho seguito una discussione in cui una persona affermava che il passaggio dell'id di sessione come parametro url non è sicuro e che invece dovrebbero essere utilizzati i cookie. L'altra persona ha detto il contrario e ha sostenuto che Paypal, ad esempio, sta passando l'id di sessione come parametro url per motivi di sicurezza.

Il passaggio dell'id di sessione come parametro url è davvero insicuro? Perché i cookie sono più sicuri? Quali possibilità ha un utente malintenzionato per entrambe le opzioni (cookie e parametro URL)?

Cinque risposte:
Charles
2012-04-24 00:03:30 UTC
view on stackexchange narkive permalink

Il passaggio dell'id di sessione come parametro url è davvero insicuro?

Sebbene non sia intrinsecamente insicuro, può essere un problema a meno che il codice non sia molto ben progettato.

Diciamo che visito il mio forum preferito. Mi accede e aggiunge il mio ID di sessione all'URL in ogni richiesta. Trovo un argomento particolarmente interessante e copia & incolla l'URL in un messaggio istantaneo al mio amico.

A meno che l'applicazione non abbia provveduto a garantire che ci sia qualche forma di convalida su l'ID di sessione, l'amico che ha fatto clic su quel collegamento potrebbe ereditare la mia sessione e quindi sarebbe in grado di fare tutto ciò che posso fare, come me.

Memorizzando gli identificatori di sessione nei cookie , elimini completamente il problema della condivisione dei link.

Esiste una variazione su questo tema chiamata fissazione della sessione, che implica la condivisione intenzionale di un identificatore di sessione per scopi dannosi. L'articolo di Wikipedia collegato approfondisce come funziona questo attacco e come si differenzia dalla condivisione involontaria dell'identificatore di sessione.

Perché i cookie sono più sicuri?

I cookie possono essere più sicuri qui, perché non sono qualcosa che gli utenti normali possono copiare &, incollare, o anche visualizzare e modificare. Sono un valore predefinito molto più sicuro.

Quali possibilità ha un aggressore per entrambe le opzioni?

Nessuno di questi metodi è protetto da attacchi man-in-the-middle su comunicazioni non crittografate. I componenti aggiuntivi del browser, lo spyware e altri dispositivi nocivi lato client possono anche spiare entrambi i metodi di memorizzazione degli identificatori di sessione.

In entrambi i casi, la migliore pratica è la convalida lato server del client che dichiara di possedere un ID sessione. Di cosa si compone questa convalida è in discussione. Tieni presente che gli utenti dietro proxy aziendali possono saltare da un indirizzo IP all'altro tra le richieste, quindi bloccare una sessione a un indirizzo IP potrebbe allontanare accidentalmente le persone. L'articolo sulla correzione della sessione menziona alcune altre utili alternative.

Si noti inoltre che i cookie vengono memorizzati sul disco rigido, lasciando molte più tracce.
@ewanm89 e gli URL vengono memorizzati nella cronologia del browser (e nei segnalibri)
E, naturalmente, nessuno dei due è vero se il tuo browser è configurato per non salvare cronologia / cookie o se è in esecuzione in modalità privacy. Tuttavia, ciò * non * fermerà gli attacchi MitM su canali non crittografati ed è solo un piccolo ostacolo allo spyware o al malware collegato al browser dallo spionaggio comunque.
-1 non hai menzionato la fissazione della sessione.
@ratchetfreak dipende da altre impostazioni, forse, forse no, un cookie atterra sempre su disco almeno per la sessione.
@Rook, Preferisco un feedback costruttivo ai voti negativi. Ho aggiunto un riferimento agli attacchi di riparazione della sessione.
Ok, in genere non sono d'accordo con questo post. Chi se ne frega degli utenti regolari che lo modificano. Ci sono attacchi reali esposti passando il cookie con GET, nessuno dovrebbe usare questo metodo, questo post è solo fuorviante.
Sei più che benvenuto a fornire la tua risposta, se trovi la mia carente. Parlo per una vasta esperienza nel mondo reale, non solo da un punto di vista puramente orientato alla sicurezza. Quando si supportano applicazioni progettate prima che gli sviluppatori comprendano le implicazioni di tali cose, il passaggio * accidentale * dell'identificatore di sessione era una cosa molto più visibile e molto più problematica del vettore di attacco effettivo che presenta. Ora che è ben chiaro che si tratta di un vettore di attacco, * devono * essere eseguiti passaggi per mitigarlo.
Non sono solo gli utenti dietro i proxy aziendali a cambiare gli indirizzi IP.Uno scenario più comune in questi giorni è che gli utenti mobili cambiano le reti Wi-Fi o passano dalla rete dati al Wi-Fi.
martinstoeckli
2012-04-24 00:50:17 UTC
view on stackexchange narkive permalink

La maggior parte dei siti Web memorizza lo stato di accesso dell'utente nella sessione e, se un utente malintenzionato dispone dell'ID di sessione, ha anche i privilegi dell'utente connesso. In altre parole, le due preoccupazioni di mantenere la sessione e l'autenticazione sono spesso accoppiate.

Un problema è che è facile effettuare attacchi di fissazione della sessione. In questo caso, un utente malintenzionato invierà all'utente un URL preparato con un ID di sessione noto. Se l'utente fa clic su questo URL e esegue un accesso, l'attaccante avrà una sessione con privilegi. Se il sito Web richiede un cookie, tuttavia, un URL preparato in un'e-mail non sarà sufficiente.

Se un sito utilizza HTTP combinato con HTTPS, l'id verrà trasmesso in chiaro nell'URL per tutte le richieste HTTP (anche per una richiesta di immagine). Quindi, se l'attaccante può leggere una singola richiesta HTTP dopo che l'utente ha effettuato l'accesso, conosce l'id di sessione.

Una via d'uscita dal problema sarebbe separare le due preoccupazioni, mantenendo la sessione e l'autenticazione. È quindi possibile lasciare l'id di sessione non protetto, solo per mantenere la sessione, e utilizzare un cookie separato per verificare lo stato di accesso. Questo cookie deve essere configurato per essere inviato solo alle pagine HTTPS.

bobince
2012-04-24 18:33:13 UTC
view on stackexchange narkive permalink

Oltre a quanto hanno detto Charles e Martin, inserire qualsiasi cosa nell'URL rende più probabile la perdita. Ciò può avvenire tramite un'intestazione Referer in una risorsa collegata, dall'accesso all'endpoint con i record della cronologia del browser, dallo sniffing della cronologia della forza bruta, dai registri Web protetti in modo inappropriato e così via. Quindi in genere è sconsigliabile mettere tutto ciò che si desidera mantenere segreto in un URL / stringa di query.

Non ho visto PayPal utilizzare gli ID di sessione del server negli URL. Non c'è modo che sia davvero più sicuro dei cookie; il motivo per cui è stato in genere fatto in passato era per supportare i browser senza cookie abilitati. Questa è sempre meno una preoccupazione in questi giorni, e i problemi di usabilità di non dover condividere i collegamenti, oltre agli attacchi di correzione della sessione, significano che la sessione nell'URL viene solitamente evitata oggi.

"dalla storia della forza bruta annusando _" come?
Il più significativo buon vecchio CSS: ha visitato la cronologia dei collegamenti. Ci sono stati altri problemi di perdita della cronologia (ad es. Attacchi temporali) ma sono molto più difficili da eseguire.
Niels Basjes
2012-04-30 23:58:51 UTC
view on stackexchange narkive permalink

Qualcosa che ho visto alcuni anni fa è stato che qualcuno ha copiato un URL (CON sessionid) in twitter. Tutti i follower avevano quindi pieno accesso all'account di quella persona su quel sito.

Quindi sì, inserire un sessionID nell'URL è una cattiva idea.

LongTime
2018-03-15 07:52:12 UTC
view on stackexchange narkive permalink

L'ID di sessione aumenta la sicurezza quando i cookie sono già utilizzati. Immagina se ci fosse un link che trasferisce denaro dalla tua banca:

https://mybank.com/transferMoney?sum=10000&destAccount=someAccount

Se ti affidi solo ai cookie, questo link può esserti fornito in un'email di truffa. Quando lo apri e fai clic su questo collegamento, poiché hai un cookie nel tuo browser, sarà effettivamente funzionante. Trasferirai con successo (e inconsapevolmente) denaro dal tuo account a quello di qualcun altro.

Se il link fosse:

https://mybank.com/transferMoney?sum = 10000&destAccount = someAccount&sessionId = jow8082345hnfn9234

quindi un truffatore maligno non può inviarti l'email come quella sopra perché indovinare l'ID della tua sessione corrente è quasi impossibile.

La domanda è * perché è insicuro * ?.Sembra che tu stia rispondendo * perché è sicuro *?


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...