JWT vs Sessioni

1

Ho un'applicazione PHP, attualmente è molto dipendente da Sessions. Sto cercando di rimuovere la maggior parte, se non tutti, l'utilizzo della sessione da esso.

Quando si tratta di loggare un utente in. Ho alcune scelte,

  1. continua a utilizzare le sessioni per memorizzare i dati utente di base.
  2. genera il mio token basato su cookie, che punta a un ID di informazioni memorizzate in memcache con i dati utente di base al suo interno, per verificare l'utente
  3. genera token JWT, archiviato in cookie e utilizzato per archiviare un ID che punta alle informazioni in memcache per verificare l'utente.

Fondamentalmente, sto cercando di evitare problemi come il dirottamento di sessione ecc. ma non sono sicuro che l'implementazione di un sistema JWT sarà utile come inizialmente pensavo.

C'è molto scritto sembra sui pro di JWT, ma ugualmente, molto scritto su "non usare JWT per le sessioni"

Dato che non sto pianificando di archiviare dati utente reali nel token JWT, solo un ID, c'è molto vantaggio su questo rispetto a un ID di sessione PHP standard?

Il vantaggio principale che vedo è che posso assicurarmi che non sia stato manomesso, ma che comunque sarei stato in grado di dirottare dato che è stato memorizzato in un cookie?

Garantire che il cookie sia HTTP_Only non sarebbe di aiuto in alcuni aspetti.

Quindi, da un punto di vista della sicurezza, qual è il problema più affidabile, meno incline alla sicurezza, metodo di memorizzazione di ciò che è fondamentalmente un ID di sessione archiviato in un altro formato.

    
posta Charlie Smith 31.10.2016 - 02:30
fonte

1 risposta

5

Devi chiederti cosa cerchi di proteggere (hai citato problemi come il dirottamento di sessione) e in quale ambiente.

SE vuoi archiviare solo un identificatore di sessione sul lato client, JWT non ti dà nulla, che non è già fornito dalle tipiche sessioni basate sui cookie.

Il problema risolto da JWT è che i dati della sessione possono, se il tuo servizio è estremamente popolare, mettere a dura prova il tuo server. Con JWT, i dati della sessione sono archiviati sul lato client, per cui, il server non ha bisogno di tenere traccia dello stato (motivo per cui alcuni dicono che JWT è "senza stato"), quindi scaricano il carico sul client . Mantenere lo stato sul lato client introduce tuttavia molte complessità extra.

Mantenere lo stato sul lato server è il modello classico. Questo schema è ben compreso e le varie questioni sono state, nel tempo, chiarite. L'implementazione di sessioni basate sui cookie è abbastanza semplice. I cookie hanno anche alcune misure di protezione in più rispetto alle intestazioni "semplici", come i flag http_only e secure_only .

Le persone della sicurezza sono, in generale, abbastanza caute nell'adattare nuove e brillanti implementazioni; a loro piace mettere i loro soldi su modelli ben compresi e testati nel tempo. Quindi, mentre JWT è piuttosto di moda al momento, questo non li rende una soluzione di sicurezza migliore. Per la tua tipica applicazione web, vorrei, senza dubbio, consigli usando sessioni basate sui cookie.

    
risposta data 31.10.2016 - 11:03
fonte

Leggi altre domande sui tag