Differenze tra Cookie vs Sessione Variabile per dati sensibili

2

Sto facendo il mio sistema di autenticazione di accesso, e voglio fare un sistema robusto. Voglio decidere quale direzione dovrei prendere per mantenere l'utente loggato. Ho posto una domanda per ogni modo, e anche quello che penso siano i pro / contro.

Cookie

  1. Quanto è sicuro conservare un oggetto "Utente", con molte proprietà (incluso il passaggio crittografato) in una stringa base64?

Svantaggio : deve essere crittografato in modo che l'utente non possa facilmente manipolare i dati
Vantaggio : può essere impostato per periodi di tempo più lunghi e può persistere durante le sessioni .

Variabile di sessione

  1. Quanto è sicuro conservare dati di testo in chiaro?

Svantaggio : dura solo per la sessione del server.
Vantaggi : i cookie sono automaticamente crittografati e più semplici da codificare dei cookie.

Quali sono altri vantaggi e svantaggi?

    
posta Dillinger 17.09.2015 - 17:51
fonte

2 risposte

2

1) how safe is to store an "User" object, with many properties (including encrypted pass) in a base64 string?

Non dovresti mai memorizzare la password ovunque. Non importa se è crittografato o meno. Non si dovrebbe nemmeno memorizzare una copia crittografata sul lato server. Dovresti usare qualcosa come bcrypt per creare un hash sicuro della password che usi per la convalida.

2) how safe is to store sensitive plain text data?

Una domanda migliore sarebbe "in che modo non sicuro è possibile memorizzare dati di testo in chiaro?" La risposta è che è molto pericoloso. Di maggiore preoccupazione rispetto alla parte di crittografia è che la domanda mi fa pensare che stai pensando di fidarti dei dati che possono essere falsificati dal client. Non devi mai farlo.

Se si devono memorizzare le informazioni utilizzate per l'autenticazione sul client, è necessario farlo in modo sicuro. Firmi (es .: con un HMAC ) per assicurarti che non venga manomesso. Crittografare i dati per mantenerli al sicuro. E non memorizzi mai altro che un hash della password (ad esempio: con bcrypt ) poiché sono così sensibili che nemmeno la crittografia non è sufficiente per loro.

Infine, ti consiglio caldamente di non utilizzare un sistema di autenticazione personalizzato per scopi diversi da quelli di gioco. Anche i sistemi di autenticazione degli sviluppatori di sicurezza più esperti richiedono un sacco di aiuto, test e utilizzo della vita reale prima che possano essere considerati sicuri.

    
risposta data 17.09.2015 - 19:02
fonte
2

Cookie: diversi aspetti da considerare:

  • Maggiore è il contenuto dei cookie, minore è la reattività del sito dalla prospettiva dell'utente
  • Lo spazio di archiviazione non è sicuro. È fuori dal tuo controllo. Sono disponibili numerosi attacchi basati sul prelievo dei cookie di qualcuno.
  • Stai consegnando la password crittografata a un potenziale malintenzionato.
  • Dato questo scenario non puoi fidarti dei dati che ti vengono restituiti da quel cookie. È stato in libertà. Non hai fornito alcun modo per sapere se è stato alterato, rubato o esteso. Ad esempio, è un ottimo modo per un utente malintenzionato di eseguire l'escalation dei privilegi.

Variabile di sessione:

  • Non è sicuro memorizzare dati di testo normale. Su un server condiviso, i dati della sessione sono disponibili per tutti i processi.
  • È facile presumere che qualcosa memorizzato sul server sia sicuro, ma ci sono troppi esempi che mostrano che è una cattiva ipotesi.

Ci sono altri vantaggi o svantaggi?

Sì, ci sono MOLTE vulnerabilità incarnate nell'approccio suggerito. Questa non è una critica. Non pensare di reinventare la ruota qui. Nell'arena della sicurezza, usa un sistema fidato. Ho imparato questo nel modo più duro!

    
risposta data 17.09.2015 - 19:02
fonte

Leggi altre domande sui tag