Sedikit Tips menangkal SQL injection melalui methode $_GET. .

SQL injection adalah salah satu teknik hacking yg sangat berbahaya. Jika kita amati, SQL injection berawal dari satu hal yg sebenarnya sangat sederhana sekali, yang terkadang si Administrator lupa atau karna ketidak tahuan mereka tentang hal ini. Kali ini saya akan membahas teknik dan algoritma menangkal SQL injection yg dilakukan melalui methode $_GET.
Tulisan ini berawal karna didunia maya saat ini praktek menembus pertahanan suatu SERVER dengan tehnik SQL injection ini sudah banyak terjadi, khusus'a bagi mereka para DEFACER-DEFACER yang memanfaatkan kelalaian atau ketidaktahuan ADMIN situs tersebut untuk mempertahankan diri. Disamping sedikitnya kesadaran dari programmer dan kebingungan programmer untuk membenahi skripnya. Dikarenakan sedikitnya resource yg membahas bagaimana mencegah SQL injection. Sementara tips dan trik untuk melakukan tehnik ini sangat banyak.
disini akan saya bahas dari hal yg paling kecil yang jg terkadang dilupakan.
Mari kita lihat bersama: http://target.com/test.php?task=detail&id=2
Pada kebanyakan aplikasi yg dibuat oleh programmer pemula, kode program pada test.php adalah sebagai berikut

require_once(“connection.php”);
$sql = “SELECT * FROM berita WHERE id=”.$_GET['id'];
$result = mysql_query($sql);
while($data = mysql_fetch_array()){
echo “

”.$data['judul'].”

”;
echo “Posting pada tanggal: “.$data['tanggal_posting'];
echo $data['isi'];
}
?>
Coba kita lihat lagi, betapa programmer, entah karena ketidak tahuan atau malas membenahi (nah ini yg susah dan bahaya) karena tidak memberikan filter pada input $_GET['id'].
Padahal ini sangat berbahaya jika attacker mencoba melakukan teknik ini.

Disana ada 2 kesalahan fatal.
1. Tidak memberikan filter atas variable $_GET['id']. Sehingga MySQL Server akan memberikan signal kesalahan ke browser
(Jika pada PHP error_message=ON).
2. Tidak melakukan checking terhadap hasil dari Query.

Lalu, bagaimana cara penanggulangannya.
Cara mudahnya kita modifikasi skrip diatas seperti berikut ini:


require_once(“connection.php”);
// –> validasi $_GET['id']
if(!ctype_digit($_GET['id'])){
die(“alert(‘Jangan coba melakukan tehnik SQL injection disini. IP anda tertangkap untuk kami laporkan’);window.history.go(-1);”);
}
$sql = “SELECT * FROM berita WHERE id=”.$_GET['id'];
$result = mysql_query($sql);
// –> validasi hasil query
if(mysql_num_rows($result)<0){
while($data = mysql_fetch_array()){
echo “

”.$data['judul'].”

”;
echo “Posting pada tanggal: “.$data['tanggal_posting'];
echo $data['isi'];
}
} else { echo “Data yang anda cari tidak ditemukan.”; }
?>

Nah, skrip diatas kira-kira mempunyai arti algoritma seperti ini:
1. Pertama-tama, validasi $_GET['id'], jika ia bernilai Integer(angka), maka lanjutkan. Jika tidak, tampilkan peringatan “Jangan coba melakukan tehni SQL injection disini. IP anda tertangkap untuk kami laporkan’” dan kembali kehalaman selanjutnya.
2. Lakukan Query
3. Cek hasil query. Jika hasil lebih besar dari 0(1,2,dst), ambil hasil query dan tampilkan ke layar browser. Jika tidak tampilkan pesan “Data yang anda cari tidak ditemukan.”.

jadi, dengan begitu aplikasi kita sudah lumayan aman. Tunggu terus kelanjutannya ya.
Catatan: algoritma ini bisa dipakai tidak hanya pada PHP saja, tetapi bisa untuk bahasa pemrograman web yg lain. Tentu saja dengan syntax masing-masing. Untuk database selain MySQL tinggal mencari fungsi yg sama atau setara dengan fungsi-fungsi MySQL.

0 komentar:

Posting Komentar