SQL Injection adalah teknik serangan siber berupa penyisipan kode (code injection) yang digunakan untuk memodifikasi atau mendapatkan data dari database SQL. Serangan ini terjadi ketika penyerang memasukkan pernyataan SQL berbahaya melalui kolom input atau API yang digunakan aplikasi web. Jika tidak ada validasi atau sanitasi input yang baik, serangan ini dapat dieksekusi dan memungkinkan penyerang mengambil alih data atau merusak sistem.
Penyerang yang berhasil melancarkan SQL Injection bisa:
- Memalsukan identitas pengguna dengan akses tinggi.
- Menambah diri mereka sebagai admin di sistem database.
- Mengubah data dan transaksi.
- Mengambil atau menghancurkan semua data yang tersimpan di server.
Di era modern, serangan SQL Injection sering kali terjadi melalui permintaan API website atau layanan yang rentan. Serangan ini bisa sangat berbahaya, hingga memungkinkan penyerang mendapatkan akses root dan kendali penuh atas mesin yang digunakan server.
Bagaimana Serangan SQL Injection Bekerja?
Bayangkan seorang pria bernama Bob sedang diadili dan mengisi formulir pendaftaran. Bob menuliskan namanya sebagai “Bob is free to go” (Bob bebas pergi). Ketika hakim membaca dengan lantang, “Sekarang memanggil Bob is free to go,” petugas keamanan salah mengartikan kalimat tersebut dan membebaskannya.
Konsep dasar serangan SQL Injection sama: kolom input yang seharusnya menerima data tertentu malah diberi perintah SQL. Saat dijalankan, perintah tersebut dapat keluar dari batas yang diharapkan dan menimbulkan perilaku berbahaya.
Contoh Perbandingan Query SQL Normal dan SQL Injection
Query SQL Normal:
Berikut adalah kode normal di mana kolom input diisi dengan studentId dan dikirimkan ke query SQL untuk mencari data mahasiswa berdasarkan ID tersebut:
studentId = getRequestString("studentId"); lookupStudent = "SELECT * FROM students WHERE studentId = " + studentId;
Jika pengguna memasukkan 117 pada kolom input ID mahasiswa, query SQL akan menjadi seperti ini:
SELECT * FROM students WHERE studentId = 117;
Ini adalah query normal yang sesuai dengan tujuan pengembang: mencari dan mengembalikan data mahasiswa dengan ID tersebut.
SQL Injection Query:
Sekarang, bayangkan penyerang memasukkan kode seperti berikut:
117 OR 1=1;
Maka query yang dihasilkan menjadi:
SELECT * FROM students WHERE studentId = 117 OR 1=1;
Karena pernyataan 1=1 selalu benar, query ini akan mengembalikan semua data di tabel mahasiswa. Dengan cara ini, penyerang dapat mengakses seluruh informasi yang tidak seharusnya.
Alur Serangan SQL Injection
Serangan SQL Injection bekerja dengan menargetkan endpoint API atau form yang tidak aman pada website. Penyerang menggunakan alat otomatis untuk mencari celah keamanan dan mencoba memasukkan berbagai kode SQL berbahaya ke dalam formulir input.
Karena SQL Injection mudah diimplementasikan, banyak sistem rentan menjadi target, terutama ketika aplikasi menggunakan kode lama (legacy code) atau dikembangkan oleh tim dengan pengalaman terbatas.
Bagaimana Mencegah Serangan SQL Injection?
Berikut beberapa langkah yang dapat diambil untuk memitigasi risiko SQL Injection:
1. Gunakan Prepared Statements (Parameterized Queries)
Dengan parameterized queries, semua SQL code didefinisikan terlebih dahulu dan input pengguna hanya bisa masuk dalam parameter yang terbatas. Ini membantu database membedakan mana yang merupakan data dan mana yang merupakan kode.
Contoh Query Parameterized:
cursor.execute("SELECT * FROM students WHERE studentId = ?", (studentId,))
2. Escape Semua Input dari Pengguna
Karakter tertentu seperti * dan OR memiliki arti khusus di SQL. Dengan escaping, karakter tersebut diperlakukan sebagai input literal, bukan perintah.
3. Gunakan Stored Procedures
Stored procedures adalah kumpulan perintah SQL yang sudah diprogram sebelumnya dan dapat membatasi akses ke tabel tertentu. Meski tidak sempurna, stored procedures dapat mengurangi risiko dengan membatasi input dan akses.
4. Enforce Least Privilege
Akun database yang digunakan aplikasi web sebaiknya diberikan izin minimum yang diperlukan untuk menjalankan tugasnya. Hal ini menghindari akun biasa mengeksekusi perintah yang dapat merusak sistem.
5. Audit dan Monitoring Secara Berkala
Aplikasi web harus memiliki log dan pemantauan untuk mendeteksi aktivitas mencurigakan. Ini memungkinkan tim keamanan untuk segera merespons jika ada upaya serangan..
SQL Injection adalah salah satu ancaman paling serius dalam keamanan aplikasi web. Meski mudah dieksekusi, serangan ini juga dapat dicegah dengan praktik pengembangan yang tepat. Menggunakan parameterized queries, stored procedures, dan konsep least privilege dapat mengurangi risiko. Selain itu, audit rutin dan monitoring menjadi kunci dalam mendeteksi dan merespons serangan. Dengan menerapkan langkah-langkah ini, perusahaan dapat memastikan keamanan data dan melindungi sistem mereka dari serangan SQL Injection.















Comments are closed