Apa Itu SQL Injection (SQLi)?
SQL Injection (SQLi) adalah jenis serangan di mana penyerang memasukkan pernyataan SQL berbahaya ke dalam bidang input untuk memanipulasi basis data.
Serangan ini menargetkan aplikasi yang gagal menangani validasi dengan benar, input pengguna, memungkinkan akses tidak sah ke data sensitif seperti kata sandi atau detail kartu kredit, dll.
Bagaimana SQL Injection Bekerja
Ketika sebuah aplikasi langsung memasukkan input pengguna dalam kueri basis data tanpa validasi yang tepat, penyerang dapat memodifikasi perilaku kueri untuk memasukkan pernyataan SQL berbahaya.
Sebagai contoh:
SELECT * FROM users WHERE username = 'admin' AND password = '12345';
Seorang penyerang dapat memasukkan:
' OR '1'='1
Menghasilkan:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';
Ini selalu mengembalikan true, memberikan akses tidak sah.
Mengapa SQL Injection Penting dalam Keamanan Siber
SQL Injection adalah teknik paling berbahaya dan tertua dalam keamanan siber. Jenis serangan ini secara konsisten terdaftar dalam OWASP Top 10.
Bahkan kerentanan kecil memungkinkan penyerang untuk:
- Mengakses, memodifikasi, atau menghapus data
- Melewati otentikasi
- Menjalankan operasi administratif pada basis data.
- Mengkompromikan seluruh sistem.
Jenis Umum dari SQL Injection
- Classic SQLi : Injeksi langsung melalui formulir web atau parameter URL.
- Blind SQLi : Penyerang menyimpulkan informasi basis data secara tidak langsung (misalnya, melalui pesan kesalahan atau waktu respons).
- Union-based SQLi : Menggunakan operator UNION untuk menggabungkan hasil dari beberapa kueri.
- Error-based SQLi : Mengandalkan pesan kesalahan basis data untuk mengekstrak informasi.
- Time-based Blind SQLi : Mengeksploitasi penundaan respons server untuk menebak hasil kueri.
Cara Mencegah SQL Injection
1. Gunakan Kueri Parameter (Prepared Statements)
Pastikan perintah SQL memperlakukan input pengguna sebagai data, bukan kode yang dapat dieksekusi.
cursor.execute("SELECT * FROM users WHERE username = ?", (username,))
2. Validasi dan Sanitasi Input
Validasi semua input dari pengguna, hanya mengizinkan karakter yang diharapkan.
3. Gunakan Kerangka Kerja ORM
Kerangka kerja seperti Prisma, Hibernate, dll, mengurangi penanganan SQL langsung.
4. Prinsip Hak Istimewa Terkecil
Batasi izin pengguna, hanya berikan izin yang diperlukan.
5. Pengujian Keamanan Secara Berkala
Gunakan alat pengujian keamanan aplikasi seperti SAST, DAST atau IAST untuk mendeteksi cacat injeksi sejak dini.
Contoh di Dunia Nyata
Sebuah situs web toko online mengalami pelanggaran di mana penyerang menggunakan injeksi SQL dalam formulir login untuk mengekstrak detail kartu kredit dari basis datanya.
Istilah Terkait
- XSS (Cross-Site Scripting)
- DAST (Dynamic Application Security Testing)
- OWASP Top 10
- Pengujian Keamanan Aplikasi