Come implementare sessioni utente sicure usando i cookie HttpOnly?

1

Sto creando un'applicazione web e voglio consentire agli utenti di accedere (e rimanere connessi). Il mio piano per supportare questo in modo sicuro è il seguente:

  • Accesso utente da un modulo di accesso: in caso di esito positivo, il server risponde con un cookie secure e HttpOnly che contiene semplicemente il loro nome utente.
  • Quando l'utente chiude il browser e successivamente torna indietro, viene inoltrata una richiesta (che include il cookie) a un endpoint sul server al caricamento della pagina che chiede al server se l'utente corrente è loggato, che il il server determina in base alla presenza del cookie. In tal caso, il server restituisce il valore del cookie, che il lato client può visualizzare sull'interfaccia utente come nome utente dell'utente.

  • Qualsiasi richiesta che richiede un utente autenticato (come il salvataggio o l'aggiornamento dei dati) lo farà sotto il nome del nome utente specificato nel cookie in ciascuna richiesta.

Una delle domande più importanti che ho - se qualcuno entra nel loro browser e modifica manualmente il cookie username usando devtools, questo permetterebbe loro di fare richieste sotto le spoglie di un altro utente con il modo in cui ho disposto questo? Oppure HttpOnly lo impedisce?

Sono sopraffatto da questo? Guadagno qualcosa rendendo questo cookie HttpOnly , dal momento che essenzialmente sto permettendo al client di leggerlo comunque? Il mio approccio è persino sicuro?

    
posta twilco 04.12.2018 - 18:35
fonte

2 risposte

1
  • il flag secure garantisce che il cookie venga inviato solo tramite https, non in testo normale, vedi OWASP SeucreFlag
  • con il set di attributi httpOnly , un cookie non può essere modificato dal lato client javascript, vedi OWASP HttpSolo

Ora alla tua domanda:

if someone goes into their browser and manually changes the username cookie using devtools, would this allow them to make requests under the guise of another user with the way I have this laid out? Or does HttpOnly prevent this?

No httpOnly non impedisce lo scenario descritto nella tua domanda. Chiunque abbia accesso al browser può modificare il cookie, perché in questo caso non è necessario alcuno script per modificare il cookie.

Any request that requires an authenticated user (such as saving or updating data) will do so under the name of the username specified in the cookie in each given request.

Sarebbe meglio impostare un random sessionId (session token) , qualcosa che è più difficile da indovinare di un username . Ciò impedirebbe l'attacco di rappresentazione descritto (indovinando un nome utente). Per ulteriori informazioni sulla gestione della sessione, consulta Gestione delle sessioni OWASP

    
risposta data 04.12.2018 - 21:06
fonte
1

No, il tuo approccio non è sicuramente sicuro.

HttpOnly ha lo scopo di impedire che Javascript dannoso acceda al cookie. Un utente malintenzionato con accesso al browser (incluso l'utente stesso) può fare tutto ciò che desidera ai cookie, o persino ignorarli e creare i propri cookie da inviare con la richiesta.

Se desideri mantenere qualcosa di simile al tuo design esistente, ti suggerisco di crittografare o firmare il contenuto del cookie per renderlo resistente alla manomissione. Un'altra opzione è semplicemente memorizzare un identificativo di sessione nel cookie (con sufficiente entropia) e memorizzare l'ID utente nello stato di sessione sul lato server.

    
risposta data 04.12.2018 - 20:53
fonte

Leggi altre domande sui tag