Sto sviluppando un'applicazione che ha una relazione client-server, e ho difficoltà a decidere sull'algoritmo in base al quale viene determinato l'identificatore di sessione. Il mio obiettivo è limitare gli impostori dall'acquisizione di dati privati di altri utenti.
Sto considerando due opzioni:
Opzione 1: genera una stringa esadecimale casuale di 32 caratteri, la memorizza in un database e la trasferisce dal server al client all'accesso client riuscito. Il client memorizza quindi questo identificatore e lo utilizza in qualsiasi richiesta futura al server, che verrebbe sottoposto a un controllo incrociato con l'identificativo memorizzato.
Opzione 2: crea un hash da una combinazione dell'ora di inizio della sessione e del nome utente e / o della password hash del client e utilizzalo per tutte le future richieste al server. L'hash della sessione verrebbe archiviato in un database alla prima richiesta e verificato per eventuali richieste future da parte del client.
Altre informazioni: più client possono essere connessi simultaneamente dallo stesso IP e nessun client deve avere lo stesso identificatore di sessione.
Domanda: quale di queste opzioni rappresenta un approccio migliore per quanto riguarda le mie preoccupazioni (di seguito) su ciascuna?
La mia preoccupazione per la prima opzione è che l'identificatore è completamente casuale e quindi potrebbe essere replicato per caso (anche se è un caso 1 in un 3.4 * 10 38 ) , e utilizzato per "rubare" i dati privati di un utente (che avrebbe anche bisogno di usare il client in quel momento).
La mia preoccupazione per la seconda opzione è che ha un difetto di sicurezza, ovvero che se la password hash di un utente viene intercettata in qualche modo, l'intero hash della sessione potrebbe essere duplicato e i dati privati dell'utente potrebbero essere rubati.
Grazie per qualsiasi inserimento.