Tujuan dari injeksi MySQL adalah untuk mengambil alih database situs web dan mencuri informasi. Basis data sumber terbuka yang umum, seperti MySQL, telah digunakan oleh banyak pengembang situs web untuk menyimpan informasi penting seperti kata sandi, informasi pribadi, dan informasi administratif.
MySQL populer karena digunakan dengan bahasa skrip sisi server paling populer, PHP. Apalagi PHP adalah bahasa utama server Linux-Apache yang mendominasi Internet. Oleh karena itu, ini berarti peretas dapat dengan mudah mengeksploitasi PHP seperti spyware Windows.
Peretas memasukkan kode berbahaya dalam jumlah besar ke dalam formulir web yang tidak aman (melalui menu tarik-turun, kotak pencarian, formulir kontak, formulir kueri, dan kotak centang).
Kode berbahaya akan dikirim ke database MySQL dan kemudian "disuntikkan". Untuk melihat proses ini, pertama-tama pertimbangkan pernyataan kueri dasar MySQL SELECT berikut:
SELECT * FROM xmen WHERE nama pengguna = 'wolverine'
Kueri ini akan meminta database dengan tabel "xmen" untuk mengembalikan sepotong data tertentu dengan nama pengguna "wolverine" di MySQL.
Dalam formulir web, pengguna akan memasukkan wolverine, dan data ini akan diteruskan ke query MySQL.
Jika masukan tidak valid, ada cara lain bagi peretas untuk mengambil alih kendali basis data, seperti menyetel nama pengguna:
' ATAU ''=''
Anda mungkin berpikir aman menggunakan sintaksis PHP dan MySQL normal untuk melakukan masukan, karena setiap kali seseorang memasukkan kode berbahaya, mereka akan mendapatkan pesan "kueri tidak valid", tetapi bukan itu masalahnya. Peretas itu cerdas, dan lubang keamanan apa pun tidak mudah diperbaiki karena memerlukan pembersihan basis data dan pengaturan ulang hak administratif.
Dua kesalahpahaman umum tentang serangan injeksi MySQL adalah sebagai berikut:
1. Administrator jaringan percaya bahwa injeksi berbahaya dapat dibersihkan dengan perangkat lunak anti-virus atau perangkat lunak anti-spyware. Faktanya adalah jenis infeksi ini mengeksploitasi kelemahan pada database MySQL. Itu tidak bisa dihapus begitu saja dengan program anti-spyware atau antivirus apa pun.
2. Injeksi MySQL terjadi karena penyalinan file yang terinfeksi dari server lain atau sumber eksternal. Hal ini tidak terjadi. Jenis infeksi ini terjadi ketika seseorang memasukkan kode berbahaya ke dalam bentuk situs web yang tidak terlindungi dan kemudian mengakses database. Injeksi MySQL dapat dibersihkan dengan menghapus skrip berbahaya, daripada menggunakan program antivirus.
Proses validasi input pengguna
mencadangkan database yang bersih dan menempatkannya di luar server. Ekspor satu set tabel MySQL dan simpan di desktop.
Kemudian masuk ke server dan matikan form input sementara terlebih dahulu. Artinya form tidak dapat memproses data dan website dimatikan.
Kemudian mulai proses pembersihan. Pertama, di server Anda, bersihkan sisa injeksi MySQL yang berantakan. Ubah semua kata sandi basis data, FTP, dan situs web.
Dalam skenario terburuk, jika Anda terlambat membersihkan, Anda dapat memeriksa ulang program tersembunyi yang berjalan di server Anda. Program tersembunyi ini adalah Trojan yang dipasang oleh peretas. Hapus sepenuhnya dan ubah semua izin FTP. Pindai server untuk semua Trojan dan malware.
Saat Anda memodifikasi program skrip PHP, data formulir akan diproses. Cara yang baik untuk mencegah injeksi MySQL adalah dengan tidak mempercayai data pengguna. Validasi input pengguna sangat penting untuk mencegah injeksi MySQL.
Untuk merancang filter guna menyaring masukan pengguna, berikut beberapa tipnya:
1. Masukan ke formulir adalah angka. Anda dapat memverifikasi bahwa itu adalah angka dengan menguji apakah angkanya sama dengan atau lebih besar dari 0,001 (dengan asumsi Anda tidak menerima angka nol).
2. Jika itu adalah alamat email. Verifikasi apakah terdiri dari kombinasi karakter yang diperbolehkan, seperti "@", AZ, az atau beberapa angka.
3. Jika itu adalah nama atau nama pengguna seseorang. Hal ini dapat diverifikasi dari apakah berisi karakter ilegal, seperti dan dan *, yang merupakan karakter berbahaya yang dapat digunakan untuk injeksi SQL.
Memvalidasi Input Numerik
Skrip berikut memverifikasi bahwa angka valid dari 0,001 hingga tak terhingga telah dimasukkan. Perlu disebutkan bahwa dalam program PHP, Anda bahkan dapat mengizinkan penggunaan angka dalam rentang tertentu. Gunakan skrip validasi ini untuk memastikan hanya nomor yang dimasukkan ke dalam formulir.
Misalkan Anda memiliki tiga variabel numerik dalam program Anda; Anda perlu memvalidasinya, beri nama num1, num2 dan num3:
//Validasi input numerik
if($_POST['num1'] >= 0,001 && $_POST['num2'] >= 0,001 && $_POST['num3'] >= 0,001){
}else{
}
?>
Dan syaratnya bisa diperpanjang untuk menampung lebih dari tiga nomor. Jadi jika Anda memiliki 10, Anda hanya perlu memperluas pernyataan AND.
Ini dapat digunakan untuk memvalidasi formulir yang hanya menerima angka, seperti jumlah kontrak, nomor lisensi, nomor telepon, dll.
Validasi input teks dan alamat email
Berikut ini dapat digunakan untuk memvalidasi input formulir seperti nama pengguna, nama depan, dan alamat email:
//Validasi input teks
if (!preg_match('/^[-az.-@,'s]*$/i',$_POST['nama'])){
}
elseif ($kosong==0){
}else{
}
?>
Salah satu keuntungan skrip validasi ini adalah tidak menerima masukan kosong. Beberapa pengguna jahat juga memanipulasi database melalui input kosong. Dengan menggunakan skrip di atas, validasi hanya satu variabel literal, "$nama". Artinya, jika Anda memiliki tiga variabel teks, Anda dapat menyiapkan skrip validasi untuk setiap variabel untuk memastikan bahwa setiap variabel lolos tinjauan sebelum memasuki database.