Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah
  • Di passwords.js, buat hashPassword(password) mengembalikan salt:hash: salt sepanjang 16 byte acak dan kunci scrypt sepanjang 64 byte, keduanya dalam format hex.
  • GET /debug/users/:username menampilkan 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;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Autentikasi dan Keamanan

Latihan sendiri: Playground Express