Authentication, session, dan authorization — Vibe Coding dan Security: Dari Prompt ke Aplikasi Aman

MATERI 13 DARI 28

Authentication, session, dan authorization

Bangun login dan session dengan hash password, cookie aman, rotasi session ID, dan authorization server-side.

Tujuan pembelajaran

  • Membedakan authentication dan authorization.
  • Menetapkan cookie Secure/HttpOnly/SameSite.
  • Mencegah privilege escalation.

Konsep utama

Password hashing

Gunakan primitive modern bawaan platform; jangan mengenkripsi password secara reversible.

Authorization setiap request

Menu tersembunyi bukan security boundary; route/repository harus memeriksa permission.

Alur kerja teknis

  1. Tulis tujuan dan acceptance criteria.
  2. Buat perubahan kecil yang dapat ditinjau.
  3. Jalankan test dan baca diff sebelum menerima hasil AI.

Contoh implementasi

Password hash dan verify

$hash = password_hash($password, PASSWORD_DEFAULT);
if (!password_verify($submittedPassword, $hash)) {
    throw new RuntimeException('Login gagal');
}
session_regenerate_id(true);

Authorization middleware

function requireRole(role) {
  return (req, res, next) => {
    if (!req.user || req.user.role !== role) return res.sendStatus(403);
    next();
  };
}

Aspek keamanan

  • Gunakan pesan login generik untuk mencegah account enumeration.
  • Rate-limit percobaan login.
  • Recheck akun aktif dan role, jangan percaya role dari client.

Kesalahan umum

  • Menerima kode AI tanpa membaca diff dan memahami alur data.
  • Menguji hanya happy path dan mengabaikan input salah atau batas nilai.
  • Menyimpan secret, token, atau data nyata di prompt dan source code.

Pengujian dan verifikasi

  1. Jalankan contoh dengan input normal.
  2. Ulangi dengan input kosong, tipe salah, dan nilai batas.
  3. Pastikan error tidak membocorkan secret atau detail internal.

Latihan

  1. Modifikasi contoh dengan satu kebutuhan baru dan tulis acceptance criteria-nya.
  2. Tambahkan satu negative test lalu jelaskan risiko yang dicegah.

Checklist

  • Tujuan dan batas pekerjaan jelas.
  • Input divalidasi di server.
  • Secret tidak berada di source/prompt.
  • Test lulus dan diff sudah dibaca.

Rangkuman

Bangun login dan session dengan hash password, cookie aman, rotasi session ID, dan authorization server-side.