Non memorizzare mai le password
Fa parte della sezione Autenticazione e sicurezza del percorso Node.js di Coddy. Lezione 1 di 17.
Se il tuo database viene divulgato, tutte le password memorizzate così come sono state digitate possono essere lette, e le persone usano la stessa password su altri siti. Perciò memorizzi invece un hash: un valore calcolato a partire dalla password che non può essere riconvertito in essa.
Per le password, Node offre crypto.scrypt. È lento di proposito, così indovinare milioni di password costa a un aggressore ore. Un salt, ovvero byte casuali mescolati prima dell'hashing, fa sì che due persone con la stessa password ottengano hash diversi. Il salt non è segreto: lo memorizzi accanto all'hash.
import { randomBytes, scrypt } from 'node:crypto';
import { promisify } from 'node:util';
const scryptAsync = promisify(scrypt);
const salt = randomBytes(16).toString('hex');
const key = await scryptAsync('pin 4821', salt, 32);
console.log(key.toString('base64'));promisify trasforma il callback di scrypt in una promise che puoi usare con await.
Sfida
Facile- In
passwords.js, fai in modo chehashPassword(password)restituiscasalt:hash: 16 byte casuali di salt e una chiave scrypt di 64 byte, entrambi in esadecimale. GET /debug/users/:usernamemostra ciò che è stato salvato durante la registrazione.
Premi Run. Invia POST /signup con {"username": "ada", "password": "correct horse"}, poi usa la stessa password per bob e infine confronta entrambi gli utenti.
Provalo tu
import { randomBytes, scrypt } from 'node:crypto';
import { promisify } from 'node:util';
const scryptAsync = promisify(scrypt);
// Trasforma una password nel testo memorizzato da signup.
// Per ora mantiene la password così come è stata digitata.
export async function hashPassword(password) {
return password;
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.