È sicuro memorizzare la password nella sessione PHP?

8

Ho bisogno di fare alcune crittografie nella zona privata del mio sito web e voglio bcrypt della password dell'utente.

È sicuro memorizzare la password nella sessione quando l'utente effettua il login, in modo che possa usarlo in seguito?

    
posta Surfer on the fall 21.08.2012 - 16:29
fonte

2 risposte

10

Non memorizzare la password nelle variabili di sessione. Invece, utilizzare una chiave surrogata.

Ad esempio:

  1. Genera una chiave casuale. Questa è la tua chiave surrogata.
  2. Usa quella chiave per crittografare i dati di cui hai bisogno.
  3. Genera una chiave di archiviazione dalla tua password, utilizzando una funzione di derivazione della chiave appropriata (ad esempio PBKDF2 o bcrypt).
  4. Cripta la chiave surrogata con la chiave di archiviazione. Se le due chiavi sono di uguale lunghezza, un xor bit a bit dei due è una forma ideale di crittografia, poiché è semplice e non può essere interrotta senza conoscere uno dei tasti.
  5. Memorizza la chiave surrogata crittografata.

Quando l'utente esegue il login, fai quanto segue:

  1. Calcola la chiave di archiviazione dalla password.
  2. Utilizza la chiave di archiviazione per decrittografare la chiave surrogata crittografata.
  3. Salva la chiave surrogata decodificata nella variabile di sessione.
  4. Utilizza la chiave surrogata per decrittografare i dati secondo necessità.
  5. Distruggi la chiave surrogata decrittografata quando termina la sessione.

Se un utente malintenzionato ottiene l'accesso in lettura ai dati della sessione memorizzati nella directory /tmp , potrebbe estrarre le chiavi surrogate. Tuttavia, non saranno in grado di ottenere la password dell'utente. Anche se questo non protegge i dati che stai crittografando sul server, impedisce l'accesso non autorizzato all'account dell'utente e impedisce all'utente malintenzionato di sfruttare casi in cui l'utente ha utilizzato la stessa password altrove.

    
risposta data 21.08.2012 - 17:36
fonte
1

Se vuoi usare PHP in modo sicuro, dovresti avere installata la patch per PHP di Suoshin Hardened . (Qualsiasi società di hosting che valga la pena occupare avrà già sui loro server). Questa patch include funzionalità che crittografa automaticamente i dati della sessione, il che dovrebbe essere sufficiente per proteggerti da determinati tipi di attacco.

Ma gli hack delle sessioni sono solo uno degli strumenti degli hacker e le password sono un obiettivo primario, quindi non dovrebbero essere trattati come qualcosa a cui il programma dovrebbe aggrapparsi (anche in memoria) per un qualsiasi periodo di tempo; una password deve essere cancellata il prima possibile dopo l'input e la stringa della password stessa viene immediatamente cancellata.

Quindi la mia risposta alla tua domanda sarebbe no, non dovresti prendere in considerazione di tenere una password per riutilizzarla in seguito.

    
risposta data 22.08.2012 - 11:54
fonte

Leggi altre domande sui tag