Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

Pemrograman Web Aman: Input, Query, dan Hak Akses

Pelajaran 2 dari 14

Data masukan dan batas kepercayaan

Dari query rakitan ke query berparameter

Setelah pelajaran ini kamu bisa mengenali query yang dirakit dari masukan pengguna dan menggantinya dengan placeholder ? beserta tuple parameter di sqlite3.

±14 menitDiperiksa 7 Okt 2026

Materi

Query rakitan dibuat dengan menyambung teks, misalnya f-string yang menyisipkan nama dari formulir di antara tanda petik. Hasil sambungan itu sampai ke SQLite sebagai satu teks perintah, dan SQLite tidak tahu bagian mana yang ditulis programmer dan bagian mana yang diketik pengguna. Nama sah seperti Ahmad Na'im sudah cukup merusaknya: tanda petik di tengah nama menutup literal teks lebih awal, dan SQLite melempar OperationalError. Masukan yang disusun dengan sengaja bisa mengubah arti perintahnya. OWASP merumuskan sumber masalahnya: kueri dinamis yang dirakit lewat penyambungan string dari masukan pengguna.

Query berparameter memisahkan keduanya. Teks SQL ditulis lengkap dengan tanda tanya sebagai penanda tempat (placeholder), lalu nilainya dikirim terpisah sebagai argumen kedua execute(), berupa tuple. Basis data menerima perintah yang sudah jadi dan memperlakukan setiap nilai sebagai data, apa pun isinya: nama bertanda petik dicari persis seperti ditulis. OWASP menempatkan cara ini sebagai pertahanan pertama, dan dokumentasi sqlite3 menegaskan placeholder dipakai untuk mengikat nilai, bukan format string Python.

judul = "Ronggeng Dukuh Paruk"   # dari kotak pencarian perpustakaan

# Rakitan: nilai menyatu dengan teks SQL
conn.execute(f"SELECT id FROM buku WHERE judul = '{judul}'")

# Berparameter: teks SQL tetap, nilai dikirim terpisah
conn.execute("SELECT id FROM buku WHERE judul = ?", (judul,))

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 1 dari 3

Kode di bawah dijalankan dengan kota = "Medan". Apa yang terjadi?

kota = "Medan"
conn.execute("SELECT nama FROM pelanggan WHERE kota = ?", (kota))
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke