SQL Injection (SQLi) adalah salah satu teknik serangan siber paling berbahaya yang menargetkan aplikasi berbasis database. Dengan mengeksploitasi celah keamanan dalam kode SQL, peretas dapat mencuri, mengubah, atau bahkan menghapus data dalam sistem. Dalam artikel ini, kita akan membahas secara lengkap tentang SQL Injection, cara kerjanya, contoh serangan, serta langkah-langkah pencegahannya.
1. Apa Itu SQL Injection?
SQL Injection adalah teknik peretasan yang memungkinkan penyerang memasukkan perintah SQL berbahaya ke dalam input aplikasi yang tidak terproteksi dengan baik. Serangan ini dapat mengakibatkan akses tidak sah ke database dan merusak integritas data.
Contoh sederhana SQL Injection:
SELECT * FROM users WHERE username = 'admin' AND password = '12345';
Jika aplikasi tidak memvalidasi input pengguna, seorang peretas bisa memasukkan:
' OR '1'='1
Sehingga query berubah menjadi:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';
Karena kondisi 1=1
selalu benar, peretas bisa masuk tanpa kata sandi.
2. Jenis-Jenis SQL Injection
- Classic SQL Injection – Menyisipkan perintah SQL langsung melalui input formulir.
- Blind SQL Injection – Penyerang tidak melihat langsung respons dari database, tetapi bisa menguji melalui perubahan perilaku aplikasi.
- Boolean-Based SQL Injection – Penyerang mengirimkan input tertentu dan mengevaluasi perubahan pada output aplikasi.
- Time-Based SQL Injection – Penyerang menguji celah keamanan dengan memerintahkan database untuk menunda respons.
3. Contoh Serangan SQL Injection
3.1. Login Bypass
Penyerang memasukkan payload berikut pada kolom username atau password:
admin' --
Query yang dieksekusi menjadi:
SELECT * FROM users WHERE username = 'admin' -- ' AND password = 'password';
Tanda --
mengabaikan bagian query setelahnya, sehingga peretas bisa login tanpa kata sandi.
3.2. Dump Data dari Database
Jika aplikasi rentan terhadap SQL Injection, peretas dapat menggunakan query seperti ini untuk mencuri semua data pengguna:
SELECT username, password FROM users;
4. Cara Mencegah SQL Injection
Untuk menghindari serangan SQL Injection, berikut beberapa metode pencegahan yang wajib diterapkan:
4.1. Gunakan Prepared Statements
Gunakan Prepared Statements dengan parameterized queries untuk mencegah SQL Injection. Contoh di PHP menggunakan MySQLi:
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
4.2. Validasi Input Pengguna
Batasi karakter yang diizinkan dalam input formulir agar tidak ada karakter berbahaya yang dapat dimasukkan.
4.3. Batasi Hak Akses Database
Gunakan akun database dengan hak akses terbatas untuk mencegah modifikasi database yang tidak sah.
4.4. Gunakan Web Application Firewall (WAF)
Firewall aplikasi web dapat memblokir permintaan yang mencurigakan sebelum mencapai server.
4.5. Enkripsi Data Sensitif
Selalu enkripsi kata sandi dengan algoritma seperti bcrypt atau Argon2 agar tidak dapat dicuri dalam bentuk plaintext.
Kesimpulan
SQL Injection adalah ancaman serius yang dapat menyebabkan pencurian data dan peretasan sistem. Dengan menerapkan teknik keamanan seperti prepared statements, validasi input, dan firewall, kita bisa mencegah serangan ini secara efektif.