Injeksi SQL adalah kueri SQL yang dibentuk dengan jahat yang digunakan untuk "membingungkan" database SQL agar memberikan sesuatu yang tidak seharusnya. Misalnya, pertimbangkan kueri berikut
"SELECT * FROM `users` WHERE `username` = '$name'";
Dalam kasus normal, ini akan berhasil. Jika kami mengirimkan 'Jack' ke ini, itu akan mengembalikan semua pengguna bernama Jack. Namun, jika pengguna masuk, katakan "' OR 1=1", kueri yang dihasilkan adalah
"SELECT * FROM `users` WHERE `username` = '' OR 1=1";
Karena 1 selalu sama dengan 1, dan klausa kombinasinya adalah OR, ini akan mengembalikan nilai true pada setiap baris, yang pada gilirannya akan menampilkan SETIAP baris kepada pengguna jahat. Dengan menggunakan teknik ini, seseorang dapat melihat seluruh database Anda. Juga pertimbangkan jika seseorang mengirimkan sesuatu seperti "'; DROP TABLE users
";--, yang menghasilkan
"SELECT * FROM `users` WHERE `username` = ''; DROP TABLE `users`";--";
Yang merupakan dua kueri, yang satu tidak akan melakukan apa-apa, yang kedua akan menghapus SELURUH database pengguna, yang mengakibatkan hilangnya data Anda.
Metode terbaik untuk mencegah injeksi SQL adalah dengan menggunakan pernyataan yang telah disiapkan. Dengan ini, Anda mengirim kueri ke database SQL yang mengatakan sesuatu seperti
"SELECT * FROM `users` WHERE `username` = '?'";
Ini memungkinkan database mengetahui format kueri (WHERE username sama dengan beberapa nilai), sehingga tidak ada kebingungan saat diberikan kueri teks biasa. Kemudian database tahu untuk mengharapkan satu nilai, dan di mana meletakkannya. Kemudian Anda meneruskan nilai itu ke database yang dapat digunakan untuk mencari. Ini juga lebih baik karena database dapat mengoptimalkan kueri untuk pencarian yang lebih cepat.
Bacalah pernyataan yang telah disiapkan, yang akan menjelaskan hal ini secara lebih rinci.