FlawOpen

flawopen.com/SQL Injection/Apa itu kueri terparameterisasi?

Apa itu kueri terparameterisasi, secara sederhana?

Halaman referensi
Penjelasan sederhana

Bayangkan formulir dengan kolom berlabel: program mempertahankan instruksi tetap dan meminta pustaka basis data menempatkan setiap nilai pada kolom yang sesuai. Pustaka dapat menggunakan persiapan native di server atau mengemulasikannya di klien, tetapi kode aplikasi tidak boleh menulis ulang instruksi dengan input pengguna.

Mekanismenya

Dengan prepared statement native di server, driver menyiapkan SQL yang berisi placeholder lalu memberikan nilai terikat saat eksekusi. Protokol dan waktunya bergantung pada basis data dan driver. Beberapa driver dapat mengemulasikan persiapan di klien; PDO mendokumentasikan mode ini secara eksplisit. Jadi, panggilan API saja tidak menunjukkan bagaimana nilai dikirim. Pertahankan struktur SQL, gunakan API binding yang didokumentasikan driver, dan periksa apakah mode native atau emulasi yang aktif.

Mengapa ini berbeda dari sekadar "escaping dengan hati-hati"

Escaping manual mengharuskan kode aplikasi mengodekan nilai dengan benar sebelum menggabungkannya; cara ini rapuh dan bergantung pada konteks. API binding parameter menyerahkan penanganan nilai kepada driver. Pada persiapan native di server, nilai dikirim sebagai parameter protokol terpisah; dalam mode emulasi, driver memproses placeholder di klien. Jangan masukkan input pengguna ke string SQL yang dirangkai aplikasi, dan periksa perilaku binding yang didokumentasikan driver.

FAQ

Apakah ini sama dengan "prepared statement"?

Sangat terkait — prepared statement adalah objek di sisi basis data yang dibuat dari struktur kueri tetap; parameterisasi adalah praktik mengikat nilai ke sana secara terpisah. Kedua istilah sering dipakai bergantian.

Apakah ini berlaku untuk setiap bagian kueri?

Hanya untuk nilai (data), bukan untuk pengidentifikasi seperti nama tabel atau kolom — itu perlu pertahanan lain, biasanya daftar izin.

Referensi

Lihat juga SQL Injection (CWE-89): cara kerja dan cara mencegahnya di setiap bahasa — flawopen.com Apakah Prisma $queryRaw aman dari SQL Injection? Apakah interpolasi string di Rails where() aman? Apakah Sequelize query() aman dari SQL Injection? Apakah SQLAlchemy text() aman dari SQL Injection? Apakah pemeriksaan query sqlx saat kompilasi mencegah SQL injection? Apakah stored procedure kebal terhadap SQL injection?