Parolaları Asla Saklamayın
Coddy'nin Node.js Journey'sinin Kimlik Doğrulama ve Güvenlik bölümünün bir parçası. Ders 1 / 17.
Veritabanınız sızdırılırsa, yazıldığı hâliyle saklanan her parola okunabilir ve insanlar aynı parolayı başka sitelerde de kullanır. Bu yüzden bunun yerine bir karma saklarsınız: paroladan hesaplanan ve tekrar parolaya dönüştürülemeyen bir değer.
Parolalar için Node, crypto.scrypt sunar. Bilerek yavaştır; böylece milyonlarca parola tahmin etmek saldırgana saatlerce zaman kaybettirir. Karma işleminden önce karıştırılan rastgele baytlar olan bir tuz, aynı parolaya sahip iki kişinin farklı karmalar elde etmesini sağlar. Tuz gizli değildir: onu karmanın yanında saklarsınız.
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, scrypt'in geri çağrısını await kullanabileceğiniz bir promise'e dönüştürür.
Görev
Kolaypasswords.jsdosyasında,hashPassword(password)işlevininsalt:hashdöndürmesini sağlayın: 16 rastgele bayt tuz ve 64 baytlık bir scrypt anahtarı; ikisi de onaltılık biçimde.GET /debug/users/:username, signup işleminin ne kaydettiğini gösterir.
Çalıştır'a basın. POST /signup isteğini {"username": "ada", "password": "correct horse"} ile gönderin, ardından bob için aynı parolayı kullanın ve sonra iki kullanıcıyı karşılaştırın.
Kendin dene
import { randomBytes, scrypt } from 'node:crypto';
import { promisify } from 'node:util';
const scryptAsync = promisify(scrypt);
// Bir parolayı signup'ın sakladığı metne dönüştürür.
// Şimdilik parolayı yazıldığı gibi saklar.
export async function hashPassword(password) {
return password;
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.