Apa itu SQL Injection?
SQL Injection (SQLi) adalah serangan di mana penyerang menyisipkan kode SQL berbahaya melalui input pengguna. Ini adalah salah satu vulnerability tertua dan masih paling umum ditemukan di aplikasi web.
Bagaimana SQL Injection Bekerja
Ketika aplikasi menyisipkan input pengguna langsung ke dalam query SQL tanpa sanitasi:
// Kode PHP yang vulnerable
$username = $_POST["username"];
$password = $_POST["password"];
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, $query);
// Jika penyerang memasukkan:
// username: admin' --
// password: apapun
// Query menjadi:
// SELECT * FROM users WHERE username = 'admin' --' AND password = 'apapun'
// Bagian setelah -- adalah komentar, jadi password check diabaikan!
Tipe-tipe SQL Injection
- In-band SQLi — Hasil serangan terlihat langsung di response (error-based, UNION-based)
- Blind SQLi — Tidak ada output langsung, tapi penyerang bisa menebak data melalui true/false conditions
- Out-of-band SQLi — Data dikirim ke server yang dikontrol penyerang
Contoh Serangan UNION-based
// URL asli
GET /products?id=1
// Serangan UNION
GET /products?id=1 UNION SELECT username, password FROM users --
// Query yang dieksekusi:
// SELECT name, price FROM products WHERE id = 1
// UNION SELECT username, password FROM users --
Dampak SQL Injection
- Bypass autentikasi — Login tanpa password yang benar
- Pencurian data — Mengambil seluruh isi database
- Modifikasi data — Mengubah atau menghapus data
- Remote Code Execution — Dalam kasus tertentu, menjalankan perintah di server
Teknik OR 1=1
Salah satu teknik SQLi paling dasar adalah menyisipkan OR 1=1 ke klausa WHERE. Karena 1=1 selalu bernilai true, kondisi WHERE menjadi selalu terpenuhi untuk semua baris, sehingga query mengembalikan semua data dalam tabel — bukan hanya satu record yang seharusnya.
Kenali Tanda-tanda Vulnerability
Jika aplikasi menampilkan error SQL saat kamu menambahkan karakter ' di input, kemungkinan besar aplikasi tersebut vulnerable terhadap SQL Injection.