Jangan Pernah Menyimpan Kata Sandi
Termasuk bagian Autentikasi dan Keamanan dalam perjalanan Node.js di Coddy. Pelajaran 1 dari 17.
Jika database-mu bocor, setiap password yang disimpan dalam bentuk teks biasa bisa dibaca, dan orang-orang menggunakan password yang sama di situs lain. Jadi, kamu menyimpan hash sebagai gantinya: nilai yang dihitung dari password dan tidak bisa diubah kembali menjadi password semula.
Untuk password, Node menyediakan crypto.scrypt. Prosesnya sengaja dibuat lambat, sehingga menebak jutaan password menghabiskan waktu berjam-jam bagi penyerang. Salt, yaitu byte acak yang dicampurkan sebelum hashing, membuat dua orang dengan password yang sama mendapatkan hash yang berbeda. Salt bukan rahasia: kamu menyimpannya bersama 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 mengubah callback milik scrypt menjadi promise yang bisa kamu gunakan dengan await.
Tantangan
Mudah- Di
passwords.js, buathashPassword(password)mengembalikansalt:hash: salt sepanjang 16 byte acak dan kunci scrypt sepanjang 64 byte, keduanya dalam format hex. GET /debug/users/:usernamemenampilkan data yang disimpan oleh signup.
Tekan Jalankan. Kirim POST /signup dengan {"username": "ada", "password": "correct horse"}, lalu gunakan kata sandi yang sama untuk bob, kemudian bandingkan kedua pengguna.
Coba sendiri
import { randomBytes, scrypt } from 'node:crypto';
import { promisify } from 'node:util';
const scryptAsync = promisify(scrypt);
// Mengubah kata sandi menjadi teks yang disimpan saat pendaftaran.
// Untuk saat ini, kata sandi tetap seperti yang diketik.
export async function hashPassword(password) {
return password;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Autentikasi dan Keamanan
4Pemilik dan Keamanan
Hanya CatatanmuPeran AdminLatihan sendiri: Playground Express