Uno dei modi migliori per archiviare le password in modo sicuro è sale e hash. Il salting e l'hashing convertono una semplice password in un valore univoco difficile da invertire. La libreria bcrypt ti consente di hash e salt le password in Node.js con il minimo sforzo.
Che cos'è l'hashing delle password?
Hashing delle password significa passare una password in testo normale attraverso un algoritmo di hashing per generare un valore univoco. Alcuni esempi di algoritmi di hashing sono bcrypt, scrypt e SHA. Lo svantaggio dell'hashing è che è prevedibile.
Ogni volta che si passa lo stesso input a un algoritmo di hashing, verrà generato lo stesso output. Un hacker con accesso alla password con hash può decodificare la crittografia per ottenere la password originale. Possono utilizzare tecniche come attacchi di forza bruta o tavoli arcobaleno. È qui che entra in gioco la salatura.
Che cos'è il salting delle password?
Salatura delle password aggiunge una stringa casuale (il sale) a una password prima di eseguirne l'hashing. In questo modo, l'hash generato sarà sempre diverso ogni volta. Anche se un hacker ottiene la password con hash, non è pratico per lui scoprire la password originale che l'ha generata.
Come utilizzare bcrypt per eseguire l'hash e verificare una password
bcrypt è un modulo npm che semplifica il salting e l'hashing delle password.
Passaggio 1: installa bcrypt
Usando npm:
npm installare bcrypt
Usando il filato:
filato aggiungi bcrypt
Passaggio 2: importa bcrypt
cost bcrypt = richiedere("bcrypt")
Passaggio 3: genera un sale
Per generare il sale, chiamare il bcrypt.genSalt() metodo. Questo metodo accetta un valore intero che è il fattore di costo che determina il tempo impiegato per eseguire l'hashing di una password. Più alto è il fattore di costo, più tempo impiega l'algoritmo e più difficile è invertire l'hash usando la forza bruta. Un buon valore dovrebbe essere sufficientemente alto per proteggere la password ma anche sufficientemente basso per non rallentare il processo. Di solito varia tra 5 e 15. In questo tutorial useremo 10.
bcrypt.genSalt (10, (err, sale) => {
// utilizzosaleahashparola d'ordine
})
Passaggio 4: eseguire l'hashing della password
Passa la semplice password e il sale generato al hash() metodo:
bcrypt.genSalt (10, (err, sale) => {
bcrypt.hash (plaintextPassword, salt, funzione(ehm, hash) {
// Archivia l'hash nel database
});
})
Dopo aver generato l'hash, salvalo nel database. Lo utilizzerai per verificare una password e autenticare un utente che tenta di accedere.
Invece di generare separatamente sale e hash, puoi anche generare automaticamente sale e hash utilizzando un'unica funzione.
bcrypt.hash (plaintextPassword, 10, funzione(ehm, hash) {
// memorizza l'hash nel database
});
Passaggio 5: confronta le password utilizzando bcrypt
A autenticare gli utenti, dovrai confrontare la password che forniscono con quella nel database. bcrypt.compare() accetta la password in testo normale e l'hash che hai memorizzato, insieme a una funzione di richiamata. Tale callback fornisce un oggetto contenente tutti gli errori che si sono verificati e il risultato complessivo del confronto. Se la password corrisponde all'hash, il risultato è vero.
bcrypt.compare (plaintextPassword, hash, funzione(ehm, risultato) {
se (risultato) {
// la password è valida
}
});
Usando Async/Await
Puoi eseguire l'hash e verificare le password utilizzando async/await come segue.
asincronofunzionehashPassword(testo in chiaroPassword) {
cost hash = aspettare bcrypt.hash (plaintextPassword, 10);
// Archivia l'hash nel database
}
// confronta la password
asincronofunzioneconfrontarePassword(testo in chiaroPassword, hash) {
cost risultato = aspettare bcrypt.compare (plaintextPassword, hash);
Restituzione risultato;
}
Usando le promesse
La libreria bcrypt supporta anche l'uso delle promesse.
funzionehashPassword(testo in chiaroPassword) {
bcrypt.hash(testo in chiaroPassword, 10)
.allora (cancelletto => {
// Archivia l'hash nel database
})
.presa(err => {
consolle.log (err)
})
}
funzioneconfrontarePassword(testo in chiaroPassword, hash) {
bcyrpt.confrontare(testo in chiaroPassword, hash)
.allora (risultato => {
Restituzione risultato
})
.presa(err => {
consolle.log (err)
})
}
Hashing e Salting è una vittoria facile
Puoi utilizzare la libreria bcrypt per eseguire l'hashing e verificare le password in Node.js. L'hashing delle password riduce al minimo le possibilità che i criminali informatici le utilizzino per accedere a dati o servizi sensibili. Salare le tue password con hash le rende ancora più sicure. Oltre all'hashing, convalida sempre la sicurezza della password come misura di sicurezza aggiuntiva.
Gli 8 trucchi più comuni utilizzati per hackerare le password
Leggi Avanti
Argomenti correlati
- Programmazione
- Sicurezza
- Programmazione
- JavaScript
- Sicurezza
- Algoritmi
Circa l'autore
Mary Gathoni è una sviluppatrice di software con la passione per la creazione di contenuti tecnici non solo informativi ma anche coinvolgenti. Quando non sta programmando o scrivendo, le piace uscire con gli amici e stare all'aria aperta.
Iscriviti alla nostra Newsletter
Iscriviti alla nostra newsletter per suggerimenti tecnici, recensioni, ebook gratuiti e offerte esclusive!
Clicca qui per iscriverti