SQL Injection
SQL Injection (SQLi) merupakan kerentanan keamanan web yang memungkinkan penyerang mengganggu kueri yang dibuat aplikasi ke databasenya.
SQL Injection memungkinkan penyerang untuk dapat melihat data yang biasa biasanya tidak dapat diambilnya. Ini mungkin termasuk data milik pengguna, atau data lain yang dapat diakses aplikasi. Pada beberapa kasus, penyerang dapat mengubah atau menghapus data ini, yang menyebabkan perubahan terus-menerus pada konten atau perilaku aplikasi.
Pada beberapa kasus, penyerang dapat meningkatkan sernagan SQL Injection untuk membahayakan server yang mendasarinya atau infrastruktur backend lainnya. Hal ini dapat memungkinkan mereka untuk melakukan serangan Denial-of-Service attacks.
Dampak dari SQL Injection?
Serangan SQL Injection yang berhasil dapat mengakibatkan akses tidak sah ke data sensitif, seperti:
Passwords
Credit card details
Personal user information
Serangan SQL Injection telah digunakan dalam banyak pelanggaran data yang terkenal selama bertahun-tahun. Serangan ini telah menyebabkan kerusakan reputasi dan denda regulasi. Dalam beberapa kasus, penyerang dapat memperoleh backdoor yang terus menerus ke dalam sistem organisasi, yang menyebabkan kompromi jangka panjang yang dapat luput dari perhatian untuk waktu yang lama.
Cara mengatasi SQL Injection?
Sebagian besar SQL Injection dapat dicegah dengan menggunakan parameterized queries, bukan penggabungan string dalam query. Parameterized queries juga dikenal sebagai prepared statements
.
Parameterized queries dapat digunakan untuk situasi apapun saat input yang tidak terpercaya muncul sebagai data dalam query, termasuk WHERE
clause dan nilai dalam INSERT or UPDATE
statement. Keduanya tidak dapat digunakan untuk menangani input yang tidak terpercaya di bagin lain query, seperti nama tabel atau kolom atau ORDER BY
clause. Fungsionalitas aplikasi yang menempatkan data yang tidak terpercaya ke dalam bagian query ini perlu mengambil pendekatan yang berbeda, seperti:
Membuat daftar whitelist inputan yang diizinkan
Menggunakan logika yang berbeda untuk memberikan perilaku yang diperlukan
Agar parameterized query efektif dalam mencegah SQL Injection, string yang dapat digunakan dalam query harus selalu berupa hard-code constant. String tersebut tidak boleh berisi data variabel apapun dari asal manapun. Jangan tergoda untuk memutuskan kasus per kasus apakah suatu item data dapat dipercaya, dan terus gunakan penggabungan string dalam query untuk kasus yang dianggap aman. Sangat mudah untuk membuat kesalahan tentang kemungkinan asal data, atau perubahan pada kode lain dapat mencerminkan data yang dapat dipercaya.
Last updated