Passwörter niemals speichern
Teil des Abschnitts Authentifizierung und Sicherheit der Node.js-Journey von Coddy. Lektion 1 von 17.
Wenn deine Datenbank offengelegt wird, kann jedes gespeicherte Passwort im Klartext gelesen werden, und viele Menschen verwenden dasselbe Passwort auch auf anderen Websites. Deshalb speicherst du stattdessen einen Hash: einen aus dem Passwort berechneten Wert, der sich nicht wieder in das Passwort zurückverwandeln lässt.
Für Passwörter bietet Node crypto.scrypt. Die Funktion ist absichtlich langsam, sodass das Erraten von Millionen Passwörtern einen Angreifer Stunden kostet. Ein Salt – zufällige Bytes, die vor dem Hashing beigemischt werden – sorgt dafür, dass zwei Personen mit demselben Passwort unterschiedliche Hashes erhalten. Das Salt ist nicht geheim: Du speicherst es neben dem 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 wandelt den Callback von scrypt in ein Promise um, auf das du mit await warten kannst.
Aufgabe
Einfach- Lass in
passwords.jshashPassword(password)salt:hashzurückgeben: 16 zufällige Salt-Bytes und einen 64 Byte langen scrypt-Schlüssel, beides hexadezimal. GET /debug/users/:usernamezeigt, was bei der Registrierung gespeichert wurde.
Drücke auf Ausführen. Sende POST /signup mit {"username": "ada", "password": "correct horse"}, dann dasselbe Passwort für bob, und vergleiche anschließend beide Benutzer.
Probier es selbst
import { randomBytes, scrypt } from 'node:crypto';
import { promisify } from 'node:util';
const scryptAsync = promisify(scrypt);
// Wandelt ein Passwort in den Text um, den signup speichert.
// Vorerst bleibt das Passwort so, wie es eingegeben wurde.
export async function hashPassword(password) {
return password;
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Authentifizierung und Sicherheit
4Eigentümer und Sicherheit
Nur deine NotizenAdmin-Rollen2Sitzungen und Cookies
Mit Cookies merkenLogin-Sitzungen