Pada tulisan saya kali ini saya memilih untuk topik SQL Injection, karena belakangan ini banyak skali pemberitaan di media tentang pembobolan website-website pemerintahan yang saya pikir semuanya melewati bugs SQL Injection yang sangat fenomenal ini.
Kali ini kita akan membahas teknik dan algoritma menangkal SQL injection yg dilakukan melalui methode $_GET.
Mari kita lihat bersama: http://target.com/berita.php?content=detail&id=1
Pada umumnya aplikasi yg dibuat oleh programmer pemula, kode program pada berita.php adalah sebagai berikut
Source Code include ”connect.inc.php”; $sql = “SELECT * FROM berita WHERE id=”.$_GET['id'];$result = mysql_query($sql); while($news = mysql_fetch_array()) { echo “$news['title']”; echo “Posting pada tanggal: “.$news['tanggal_posting']; echo $news['content']; } ?>
Pada contoh Code diatas, terlihat bahwa sang Programmer tidak memberikan filter pada input $_GET['id']. Padahal ini sangat berbahaya jika penyusup mencoba melakukan teknik ini.
Dalam Source Code diatas, terdapat 2 kesalahan fatal :
- Tidak memberikan filter atas variable $_GET['id']. Sehingga MySQL Server akan memberikan signal kesalahan ke browser(Jika pada PHP error_message=ON).
- Tidak melakukan checking terhadap hasil dari Query.
Lalu, bagaimana cara penanggulangannya. Cara mudahnya kita modifikasi Source Code diatas seperti berikut ini:
Source Code include "connect.inc.php"; //Filter $_GET['id'] if(!ctype_digit($_GET['id'])){ die(”<!-- // ”); } $sql = “SELECT * FROM berita WHERE id=”.$_GET['id']; $result = mysql_query($sql); // –> Filter hasil query if(mysql_num_rows($result)<0){ while($news = mysql_fetch_array()){ echo "$news['title']"; echo “Posting pada tanggal: “.$news['tanggal_posting']; echo $news['content']; } } else { echo “Maaf, Berita tidak ditemukan.”; } ?>
Maksud dari Modifikasi Source Code diatas :
1. Pada Filter $_GET['id'], jika ia bernilai Integer(angka), maka proses query dilanjutkan oleh MySQL. Jika tidak, maka akan di tampilkan Alert “SQL Injection Detected.” dan kembali kehalaman selanjutnya.
2. Melakukan Proses Query terhadap permintaan Variabel $_GET['id']
3. Filter hasil Query yang diminta. Jika hasil lebih besar dari 0(1,2,dst), ambil hasil query dalam database dan tampilkan ke layar browser. Jika tidak tampilkan pesan “Maaf, Berita tidak ditemukan.”.
Dengan Contoh Script sederhana diatas, silahkan di kembangkan proses Filter dari SQL Injection. Saran saya, selalu mencari informasi seputar keamanan web, jika kawan-kawan adalah seorang webmaster atau Programmer Web.
Baca konten-konten menarik Kompasiana langsung dari smartphone kamu. Follow channel WhatsApp Kompasiana sekarang di sini: https://whatsapp.com/channel/0029VaYjYaL4Spk7WflFYJ2H