Menu
CoddyTech

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.

challenge icon

Sfida

Facile
  • In passwords.js, fai in modo che hashPassword(password) restituisca salt:hash: 16 byte casuali di salt e una chiave scrypt di 64 byte, entrambi in esadecimale.
  • GET /debug/users/:username mostra 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;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Autenticazione e sicurezza