Lihat ke Halaman Asli

Teknik Menangkal SQL Injection

Diperbarui: 26 Juni 2015   18:52

Kompasiana adalah platform blog. Konten ini menjadi tanggung jawab bloger dan tidak mewakili pandangan redaksi Kompas.

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.

Halaman Selanjutnya


BERI NILAI

Bagaimana reaksi Anda tentang artikel ini?

BERI KOMENTAR

Kirim

Konten Terkait


Video Pilihan

Terpopuler

Nilai Tertinggi

Feature Article

Terbaru

Headline