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
- Tulis tujuan dan acceptance criteria.
- Buat perubahan kecil yang dapat ditinjau.
- 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
- Jalankan contoh dengan input normal.
- Ulangi dengan input kosong, tipe salah, dan nilai batas.
- Pastikan error tidak membocorkan secret atau detail internal.
Latihan
- Modifikasi contoh dengan satu kebutuhan baru dan tulis acceptance criteria-nya.
- 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.