Sql Injection adalah kerentanan keamanan web yang memungkinkan penyerang mengganggu kueri yang dibuat aplikasi ke basis datanya. SQL Injection dapat menyerang berbagai jenis website yang menggunakan database SQL, seperti MySQL, Oracle, SQL Server, dan lain-lain.
Pada umumnya, serangan SQL Injection terjadi ketika pengelola website tidak mengimplementasikan firewall atau sistem keamanan yang memadai. Ini umumnya memungkinkan penyerang untuk melihat data yang biasanya tidak dapat mereka ambil. Ini mungkin termasuk data milik pengguna lain, atau data lain apa pun yang dapat diakses oleh aplikasi itu sendiri.
Dalam banyak kasus, penyerang dapat memodifikasi atau menghapus data ini, menyebabkan perubahan terus-menerus pada konten atau perilaku aplikasi.Kemudian Sql Injection juga dapat dilakukan dengan merusak logika aplikasi dengan mengubah kueri untuk mengganggu logika aplikasi, dan serta serangan UNION yang memungkinkan pengambilan data dari tabel database yang berbeda.
Jenis SQL Injection
Jenis Sql Injection berdasarkan bagaimana mereka mendapatkan akses ke data backend dan sejauh mana potensi kerusakan yang mungkin mereka sebabkan terdapat 3 jenis yaitu,
1. In-band SQL Injection
Jenis serangan Sql Injection ini relatif mudah dipahami oleh para penyerang karena mereka menggunakan saluran komunikasi yang sama untuk meluncurkan serangan dan mendapatkan hasilnya. Terdapat dua variasi sub dalam jenis serangan SQLi ini:
- Error-based Sql Injection : Basis data menghasilkan pesan kesalahan sebagai respons terhadap tindakan penyerang. Penyerang menggunakan informasi yang dihasilkan dari pesan kesalahan ini untuk mempelajari tentang infrastruktur basis data.
- Union-based Sql Injection : Penyerang menggunakan operator UNION SQL untuk mendapatkan data yang diinginkan dengan menggabungkan beberapa pernyataan SELECT dalam satu respons HTTP.
2. Inferential SQL Injection
Jenis Sql Injection ini melibatkan penyerang menggunakan respons dan pola perilaku dari server setelah mengirimkan muatan data untuk memperoleh pemahaman tentang struktur server. Data tidak langsung ditransfer dari basis data situs web ke penyerang, sehingga penyerang tidak melihat informasi tentang serangan secara langsung (oleh karena itu disebut ‘blind Sql Injection’). Inferential Sql Injection dapat dibagi menjadi dua sub-tipe:
- Time-based Sql Injection: Penyerang mengirimkan kueri Sql ke basis data dan membuat basis data menunggu beberapa detik sebelum memberikan respons kueri sebagai benar atau salah.
- Boolean Sql Injection: Penyerang mengirimkan kueri Sql ke basis data dan mengamati respons aplikasi yang menghasilkan hasil benar atau salah.
3. Out-of-band Sql Injection:
Jenis serangan SQL ini terjadi dalam dua skenario:
- Ketika penyerang tidak dapat menggunakan saluran yang sama untuk meluncurkan serangan dan memperoleh informasi secara langsung; atau,
- Ketika server terlalu lambat atau tidak stabil untuk menjalankan tindakan-tindakan ini.
Cara Mengatasi Sql Injection
Untuk mengatasi SQL Injection,dapat dilakukan dengan cara berikut ini :
1. Mengatur validasi input
Validasi input adalah proses memeriksa data yang dimasukkan oleh pengguna untuk memastikan bahwa hanya data yang valid dan diharapkan yang diterima. Dengan mengatur validasi input yang ketat, Anda dapat mencegah serangan SQL Injection.
2. Menggunakan parameterized queries
Parameterized queries atau prepared statements memungkinkan Anda untuk memisahkan perintah SQL dari data pengguna. Dalam parameterized queries, nilai-nilai pengguna diikat ke parameter dalam pernyataan SQL, sehingga mencegah serangan SQL Injection.
3. Memasang WAF dan IPS
Web Application Firewall (WAF) dan Intrusion Prevention System (IPS) adalah solusi keamanan yang dapat membantu melindungi aplikasi web dari berbagai serangan, termasuk SQL Injection. Mereka dapat mendeteksi dan mencegah serangan SQL Injection dengan aturan dan filter yang telah ditentukan.
4. Memasang filter untuk karakter khusus
Memasang filter atau sanitasi untuk menghilangkan atau menghindari karakter khusus, seperti tanda kutip tunggal (‘), tanda kutip ganda (“), atau karakter lain yang dapat digunakan dalam serangan SQL Injection. Ini membantu melindungi aplikasi Anda dari manipulasi yang tidak diinginkan.
5. Nonaktifkan fitur SQL standar
Nonaktifkan fitur-fitur SQL yang tidak diperlukan atau berpotensi berbahaya dalam pengaturan database Anda. Misalnya, disable fungsi-fungsi seperti EXECUTE, xp_cmdshell, atau fungsi-fungsi lain yang dapat digunakan oleh penyerang untuk menjalankan perintah SQL berbahaya.
7. Mengatur privilege
Berikan hak akses terbatas kepada pengguna atau aplikasi yang berinteraksi dengan database. Pastikan bahwa setiap pengguna hanya memiliki hak akses yang diperlukan untuk menjalankan perintah SQL yang relevan. Ini membantu membatasi kemampuan penyerang untuk menyusup dan merusak database.