Materi
Toko Batik Laweyan menjual kain lewat situs sendiri. Audit internal menemukan tiga masalah di kode checkout: harga dan pemilik pesanan dibaca dari permintaan, query dirakit dengan f-string, dan riwayat pesanan menerima parameter pemilik_id dari URL. Tugasmu memperbaiki fungsinya tanpa mengubah tampilan atau skema tabel.
Ingat urutan kerjanya. Tentukan dulu nilai mana yang datang dari luar batas kepercayaan, lalu tanyakan untuk tiap nilai apakah server sudah memilikinya sendiri. Harga produk ada di tabel produk, pemilik ada di sesi. Nilai yang memang harus datang dari pengguna, seperti produk_id, jumlah, dan filter status, diperiksa lalu dikirim ke SQLite lewat parameter, tidak pernah disisipkan ke teks SQL.
# Pola yang dipakai di misi ini, dengan tabel lain: kursus dan pendaftaran
harga = conn.execute("SELECT harga FROM kursus WHERE id = ?", (kursus_id,)).fetchone()
if harga is None:
raise ValueError("kursus tidak dikenal")
conn.execute("INSERT INTO pendaftaran(peserta_id, kursus_id, bayar) VALUES (?, ?, ?)",
(sesi["user_id"], kursus_id, harga[0]))