Query database aman: SQL dan MongoDB — Vibe Coding dan Security: Dari Prompt ke Aplikasi Aman

MATERI 10 DARI 28

Query database aman: SQL dan MongoDB

Gunakan parameter binding dan bentuk filter yang dikendalikan aplikasi agar input tidak mengubah struktur query.

Tujuan pembelajaran

  • Menggunakan prepared statement SQL.
  • Mencegah operator injection pada MongoDB.
  • Membatasi sort/filter yang diizinkan.

Konsep utama

SQL parameterization

Parameter dipisahkan dari sintaks query.

MongoDB shape validation

Jangan menerima objek filter mentah dari request; bangun filter dari scalar tervalidasi.

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

PDO prepared statement

$stmt = $pdo->prepare('SELECT id, email FROM users WHERE email = :email LIMIT 1');
$stmt->execute(['email' => strtolower(trim($email))]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

SQLite parameter binding

row = connection.execute(
    "SELECT id, email FROM users WHERE email = ?",
    (email.strip().lower(),),
).fetchone()

MongoDB filter dari scalar

const email = String(req.body.email ?? "").trim().toLowerCase();
if (!email || email.length > 191) return res.status(422).end();
const user = await users.findOne({ email, active: true });

Aspek keamanan

  • Jangan interpolasi string ke SQL.
  • Tolak request body berbentuk objek ketika field seharusnya string.
  • Allowlist nama kolom sort dan limit hasil.

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

Gunakan parameter binding dan bentuk filter yang dikendalikan aplikasi agar input tidak mengubah struktur query.