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.

instagram viewer

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

CondividereTwittaCondividereE-mail

Argomenti correlati

  • Programmazione
  • Sicurezza
  • Programmazione
  • JavaScript
  • Sicurezza
  • Algoritmi

Circa l'autore

Maria Gatoni (21 articoli pubblicati)

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.

Altro da Mary Gathoni

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per suggerimenti tecnici, recensioni, ebook gratuiti e offerte esclusive!

Clicca qui per iscriverti