Salah satu kelas kerentanan web terbesar dikenal sebagai "SQL Injection", atau SQLi. Structured Query Language, alias SQL, adalah bahasa yang digunakan untuk berinteraksi dengan sebagian besar database, meskipun sejumlah varian bahasa digunakan tergantung pada database platform. Setiap situs web yang menyimpan data pengguna, seperti informasi akun, atau menyediakan fungsionalitas unggah pengguna, seperti situs web hosting gambar akan menggunakan database untuk menyimpan data tersebut.
Tip: SQL umumnya diucapkan "ess cue ell" atau "sequel" dengan opsi pertama lebih umum dalam bahasa Inggris British dan yang kedua lebih umum dalam bahasa Inggris Amerika. Kedua pengucapan tersebut umumnya dipahami dalam konteks berbicara tentang database.
Apa itu SQL?
SQLi adalah kerentanan di mana pengembang web yang merancang kode yang berkomunikasi antara server web dan database tidak menerapkan perlindungan terhadap perintah SQL yang dikirimkan oleh a pengguna. Masalahnya adalah mungkin untuk dapat keluar dari pernyataan database dan menambahkan argumen baru atau pernyataan yang sama sekali baru. Pernyataan database yang diubah atau kedua dapat melakukan berbagai tindakan termasuk kemungkinan penghapusan skala besar atau kebocoran data.
Eksploitasi biasanya berkisar pada membuat pernyataan yang ada menjadi benar dalam semua keadaan atau memberikan perintah batch kedua yang melakukan tindakan tertentu seperti menghapus atau menampilkan semua data. Misalnya, pernyataan SQL untuk masuk ke situs web dapat memeriksa apakah nama pengguna dan kata sandi yang dikirimkan cocok dengan entri dalam database. Untuk mencoba mendapatkan akses, eksploitasi injeksi SQL dapat mencoba menambahkan klausa "atau benar" seperti "atau 1 = 1". Ini akan membuat perintah di sepanjang baris "masuk dengan nama pengguna [ini], jika kata sandinya adalah [ini], atau pernyataan ini benar".
Bagaimana mencegah SQLi
SQLi dulunya merupakan cara yang sangat umum bagi situs web untuk membuat database mereka dilanggar dan kemudian bocor secara online. Karena upaya bersama untuk memastikan bahwa kesadaran keamanan adalah bagian dari pelatihan pengembang, kelas kerentanan ini sebagian besar telah diatasi dan jarang terlihat lagi.
Metode yang benar untuk mencegah SQLi adalah dengan menggunakan pernyataan yang telah disiapkan, juga dikenal sebagai kueri berparameter. Secara tradisional, pernyataan SQL dideklarasikan dan input pengguna digabungkan ke dalamnya selama deklarasi itu. Dengan pernyataan yang disiapkan, perintah database ditulis dan kemudian fungsi terpisah menjalankan perintah dan memasukkan data pengguna. Meskipun ini mungkin tampak seperti perbedaan kecil, itu benar-benar mengubah cara perintah ditangani. Perbedaannya mencegah perintah SQL yang berarti dijalankan dan memperlakukan semua input pengguna sebagai string, mencegah injeksi SQL terjadi.