Il modo migliore per memorizzare la password nel database



Answers

Background Non hai mai ... davvero ... bisogno di conoscere la password dell'utente. Vuoi solo verificare che un utente entrante conosca la password per un account.

Hash It: memorizza l'hash delle password degli utenti (crittografia unidirezionale) tramite una potente funzione di hash. Una ricerca per "c # encrypt passwords" fornisce un sacco di esempi.

Vedere il creatore di hash SHA1 online per un'idea di cosa produce una funzione di hash (ma non usare SHA1 come funzione hash, usare qualcosa di più forte come SHA256).

Ora, una password con hash significa che tu (e ladri di database) non dovresti essere in grado di reinserire l'hash nella password originale.

Come si usa: Ma, tu dici, come posso usare questa password modificata memorizzata nel database?

Quando l'utente effettua il login, ti consegnerà il nome utente e la password (nel suo testo originale). Basta usare lo stesso codice hash per cancellare la password digitata per ottenere la versione memorizzata.

Quindi, confronta le due password hash (hash del database per il nome utente e la password con hash e digitato). Si può sapere se "ciò che hanno digitato" corrisponde a "ciò che l'utente originale ha inserito per la propria password" confrontando i propri hash.

Credito extra:

Domanda: Se avessi il tuo database, non potrei semplicemente prendere un cracker come John the Ripper e iniziare a fare hash finché non troverò le corrispondenze con le tue password memorizzate e con hash? (dato che gli utenti scelgono parole brevi, comunque ... dovrebbe essere facile)

Risposta: Sì ... sì, possono.

Quindi, dovresti "salare" le tue password. Vedi l' salt

Vedi "Come hash dati con sale" C # esempio

Question

Sto lavorando a un progetto che deve avere l'autenticazione (nome utente / pass)

Si collega anche a un database, quindi ho pensato che avrei memorizzato il nome utente e la password lì, ma non mi sembra una buona idea avere le password come solo un campo di testo in un tavolo sul db

Sto usando C # e la connessione a un server Express 2008. qualcuno può suggerire (con più esempi possibili) qual è il modo migliore per archiviare questo tipo di dati?

(Sono aperto all'idea che queste informazioni non vengano memorizzate nel db se può essere fornita una buona ragione)




Nel tuo scenario, puoi dare un'occhiata all'appartenenza di asp.net, è buona pratica archiviare la password dell'utente come stringa hash nel database. è possibile autenticare l'utente confrontando la password in arrivo con hash con quella memorizzata nel database.

Tutto è stato costruito per questo scopo, controlla l' appartenenza a asp.net




La migliore pratica di sicurezza non è quella di memorizzare la password (nemmeno crittografata), ma di memorizzare l'hash salato (con una password salt per password) della password crittografata.

In questo modo è (praticamente) impossibile recuperare una password in chiaro.




Potrei essere leggermente fuori tema perché hai menzionato la necessità di un nome utente e una password, e la mia comprensione del problema non è ammessa, ma OpenID è qualcosa che vale la pena considerare?

Se si utilizza OpenID, non si finisce affatto con la memorizzazione di credenziali se si comprende correttamente la tecnologia e gli utenti possono utilizzare le credenziali già esistenti, evitando di dover creare una nuova identità specifica per la propria applicazione.

Potrebbe non essere adatto se l'applicazione in questione è puramente per uso interno

RPX offre un modo semplice per integrare il supporto di OpenID in un'applicazione.






Related