Menu
CoddyTech

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.

challenge icon

Görev

Kolay
  • passwords.js dosyasında, hashPassword(password) işlevinin salt:hash dö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;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Kimlik Doğrulama ve Güvenlik bölümündeki tüm dersler