Nigdy nie przechowuj haseł
Część sekcji Uwierzytelnianie i bezpieczeństwo ścieżki Node.js w Coddy. Lekcja 1 z 17.
Jeśli baza danych wycieknie, każde zapisane w niej hasło w postaci wpisanej przez użytkownika będzie można odczytać, a ludzie używają tego samego hasła w innych serwisach. Dlatego zamiast tego przechowujesz hash: wartość obliczoną na podstawie hasła, której nie da się przekształcić z powrotem w to hasło.
Do obsługi haseł Node udostępnia crypto.scrypt. Jest celowo powolna, więc odgadnięcie milionów haseł zajęłoby atakującemu wiele godzin. Salt, czyli losowe bajty dodawane przed haszowaniem, sprawia, że dwie osoby używające tego samego hasła otrzymają różne hashe. Salt nie jest tajny: przechowujesz go obok hasha.
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 przekształca funkcję zwrotną scrypt w promise, którego możesz użyć z await.
Wyzwanie
Łatwy- W pliku
passwords.jsspraw, abyhashPassword(password)zwracałasalt:hash: 16 losowych bajtów soli i 64-bajtowy klucz scrypt, oba zapisane w systemie szesnastkowym. GET /debug/users/:usernamepokazuje, co zapisano podczas rejestracji.
Naciśnij Uruchom. Wyślij POST /signup z {"username": "ada", "password": "correct horse"}, następnie użyj tego samego hasła dla bob i porównaj obu użytkowników.
Spróbuj swoich sił
import { randomBytes, scrypt } from 'node:crypto';
import { promisify } from 'node:util';
const scryptAsync = promisify(scrypt);
// Przekształca hasło w tekst przechowywany podczas rejestracji.
// Na razie zachowuje hasło w postaci, w jakiej zostało wpisane.
export async function hashPassword(password) {
return password;
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Uwierzytelnianie i bezpieczeństwo
4Właściciele i bezpieczeństwo
Tylko twoje notatkiRole administratora