Serangan Injeksi SQL. Bagaimana cara mencegah Serangan Injeksi SQL?
APA ITU SQL INJECTION?
Injeksi SQL, juga dikenal sebagai SQLI, adalah vektor serangan umum yang menggunakan kode SQL berbahaya untuk manipulasi basis data backend guna mengakses informasi yang tidak seharusnya ditampilkan. Informasi ini dapat mencakup sejumlah item, termasuk data perusahaan yang sensitif, daftar pengguna, atau detail pelanggan pribadi.
Serangan Injeksi SQL
Injeksi SQL adalah teknik peretasan yang ditemukan lebih dari lima belas tahun yang lalu dan masih terbukti sangat efektif hingga saat ini, tetap menjadi prioritas utama keamanan basis data. Teknik ini digunakan menjelang pemilihan presiden AS tahun 2016 untuk membobol data pribadi 200.000 pemilih Illinois, serta dalam serangan tingkat tinggi terhadap organisasi seperti Sony Pictures, PBS, Microsoft, Yahoo, Heartland Payment Systems, dan bahkan CIA.
SQL, atau Structured Query Language, adalah bahasa perintah dan kontrol untuk basis data relasional seperti Microsoft SQL Server, Oracle, dan MySQL. Dalam pengembangan web modern, basis data ini sering digunakan di bagian belakang aplikasi web dan sistem manajemen konten yang ditulis dalam PHP, ASP.NET, atau bahasa skrip lainnya – artinya, baik konten maupun perilaku banyak situs web dibangun di atas data dalam server basis data.
Langkah-langkah untuk Mencegah Serangan Injeksi SQL
- Jangan percaya siapa pun: Anggap semua data yang dikirimkan pengguna berbahaya, jadi gunakan validasi input melalui fungsi seperti mysql_real_escape_string() MySQL untuk memastikan bahwa karakter berbahaya seperti ' tidak diteruskan ke kueri SQL dalam data. Anda juga harus membersihkan semuanya dengan memfilter data pengguna berdasarkan konteks. Misalnya, alamat email harus difilter untuk hanya mengizinkan karakter yang diizinkan dalam alamat email, nomor telepon harus difilter untuk hanya mengizinkan angka yang diizinkan dalam nomor telepon, dan seterusnya.
- Jangan gunakan SQL dinamis – jangan membuat kueri dengan input pengguna: Bahkan rutinitas pembersihan data pun bisa cacat, jadi gunakan prepared statement, kueri berparameter, atau stored procedure jika memungkinkan. Tetapi jangan lupa bahwa meskipun stored procedure mencegah beberapa jenis serangan injeksi SQL, stored procedure gagal melindungi dari banyak serangan lainnya, jadi jangan hanya mengandalkan penggunaannya untuk keamanan Anda.
- Perbarui dan tambal: Kerentanan dalam aplikasi dan basis data yang dapat dieksploitasi peretas menggunakan injeksi SQL secara teratur ditemukan, jadi sangat penting untuk menerapkan tambalan dan pembaruan sesegera mungkin. Solusi manajemen patch mungkin layak diinvestasikan.
- Gunakan hak akses yang sesuai: Jangan terhubung ke basis data Anda menggunakan akun dengan hak akses tingkat admin kecuali ada alasan yang sangat kuat untuk melakukannya. Menggunakan akun akses terbatas jauh lebih aman, dan dapat membatasi apa yang dapat dilakukan peretas. Misalnya, kode di balik halaman login harus melakukan query basis data menggunakan akun yang hanya dibatasi pada tabel kredensial yang relevan. Dengan cara ini, pelanggaran melalui saluran ini tidak dapat dimanfaatkan untuk membahayakan seluruh basis data.
- Jaga kerahasiaan informasi Anda: Anggaplah aplikasi Anda tidak aman dan bertindaklah sesuai dengan itu dengan mengenkripsi atau melakukan hashing kata sandi dan data rahasia lainnya, termasuk string koneksi.
- Jangan mengungkapkan informasi lebih dari yang Anda butuhkan: Peretas dapat mempelajari banyak hal tentang arsitektur basis data dari pesan kesalahan, jadi pastikan pesan tersebut menampilkan informasi seminimal mungkin. Gunakan mode customErrors "RemoteOnly" (atau yang setara) untuk menampilkan pesan kesalahan yang detail pada mesin lokal sambil memastikan bahwa peretas eksternal tidak mendapatkan informasi lebih dari sekadar fakta bahwa tindakannya mengakibatkan kesalahan yang tidak ditangani.
- Pantau terus pernyataan SQL dari aplikasi yang terhubung ke basis data: Ini akan membantu mengidentifikasi pernyataan SQL yang mencurigakan dan kerentanan. Alat pemantauan yang menggunakan pembelajaran mesin dan/atau analisis perilaku dapat sangat berguna.
- Beli perangkat lunak yang lebih baik: Jadikan penulis kode bertanggung jawab untuk memeriksa kode dan memperbaiki kelemahan keamanan dalam aplikasi khusus sebelum perangkat lunak dikirimkan. SANS menyarankan Anda untuk memasukkan ketentuan dari contoh kontrak ini ke dalam perjanjian Anda dengan vendor perangkat lunak mana pun.