Skip to content

Cara Ampuh Mencegah SQL Injection Gunakan Prepared Statement dan Parameterized Query

Updated: at 07.24

Daftar Isi

Apa itu SQL Injection?

SQL Injection adalah teknik serangan yang memanfaatkan celah keamanan pada aplikasi yang berinteraksi dengan database. Penyerang bisa menyisipkan kode SQL berbahaya melalui input pengguna yang tidak tervalidasi dengan baik, sehingga kode tersebut dieksekusi oleh database.

Contoh Serangan SQL Injection

Misalkan sebuah aplikasi memiliki fitur login dengan query seperti ini:

SELECT * FROM users WHERE username = '$username' AND password = '$password'

Jika aplikasi tidak memvalidasi input $username dan $password dengan benar, penyerang bisa memasukkan nilai seperti ini:

username: admin'--
password: apapun

Query akhirnya akan menjadi:

SELECT * FROM users WHERE username = 'admin'-- AND password = 'apapun'

Penyerang berhasil login sebagai admin tanpa perlu tahu passwordnya!

Bahaya SQL Injection

Serangan SQL Injection bisa berakibat fatal, seperti:

Bahkan perusahaan besar pernah menjadi korban SQL Injection. Pada 2015, peretas berhasil mencuri data 191 juta pemilih AS dari database milik Komisi Pemilihan Federal AS melalui SQL Injection.

Solusi: Prepared Statement dan Parameterized Query

Solusi paling ampuh untuk mencegah SQL Injection adalah dengan menggunakan Prepared Statement dan Parameterized Query.

Apa itu Prepared Statement?

Prepared Statement adalah fitur di banyak bahasa dan framework yang memungkinkan Anda memisahkan SQL query dari data. Query disiapkan terlebih dulu dengan “placeholder” untuk data (seperti ? atau $1), baru kemudian data diikat ke query secara terpisah.

Contoh dalam PHP dengan PDO:

$stmt = $pdo->prepare('SELECT * FROM users WHERE username = ? AND password = ?');
$stmt->execute([$_POST['username'], $_POST['password']]);

Keunggulan Prepared Statement

Prepared Statement mencegah SQL Injection karena:

  1. SQL query dan data dipisahkan, sehingga data tidak bisa mempengaruhi struktur query
  2. Database bisa membedakan mana SQL dan mana data
  3. Karakter khusus dalam data secara otomatis di-escape

Selain lebih aman, Prepared Statement juga membuat kode lebih rapi dan meningkatkan performa karena query bisa dikompilasi terlebih dulu.

Contoh Penggunaan Prepared Statement di Berbagai Bahasa

Praktik Terbaik Lainnya untuk Mencegah SQL Injection

Selain menggunakan Prepared Statement, beberapa praktik baik lainnya adalah:

Kesimpulan

SQL Injection adalah ancaman serius yang tidak boleh diremehkan oleh developer web. Menggunakan Prepared Statement dan Parameterized Query adalah cara paling efektif untuk mencegah serangan ini. Dengan memisahkan SQL query dari data, aplikasi Anda akan jauh lebih aman dari SQL Injection.

Jadi, mulai sekarang, biasakan selalu menggunakan Prepared Statement setiap kali berinteraksi dengan database. Jangan biarkan aplikasi Anda menjadi korban berikutnya dari SQL Injection!

Referensi