Algoritma dan teknik menangkal SQL injection
- Thursday, June 11, 2009, 14:02
- Komunitas, Tutorial
- 2,846 views
- 15 comments

Tidak dipungkiri lagi, SQL injection adalah salah satu teknik hacking yg sangat berbahaya. Jika diamati, SQL injection berawal dari satu hal yg sebenarnya sangat sederhana sekali. Kali ini kita akan membahas teknik dan algoritma menangkal SQL injection yg dilakukan melalui methode $_GET.
Tulisan ini diawali kepada kesadaran bahwa atas banyaknya kasus SQL injection. 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 melakukannya sangat banyak.
Mari kita lihat bersama: http://target.com/berita.php?task=detail&id=9
Pada kebanyakan aplikasi yg dibuat oleh programmer pemula, kode program pada berita.php adalah sebagai berikut
<?php
require_once(“connection.php”);
$sql = “SELECT * FROM berita WHERE id=”.$_GET['id'];
$result = mysql_query($sql);
while($data = mysql_fetch_array()){
echo “<h2>”.$data['judul'].”</h2>”;
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) 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.
Lantas, bagaimana cara penanggulangannya. Cara mudahnya kita modifikasi skrip diatas seperti berikut ini:
<?php
require_once(“connection.php”);
// –> validasi $_GET['id']
if(!ctype_digit($_GET['id'])){
die(“<script>alert(‘Jangan coba-coba ya.’);window.history.go(-1);</script>”);
}
$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 “<h2>”.$data['judul'].”</h2>”;
echo “Posting pada tanggal: “.$data['tanggal_posting'];
echo $data['isi'];
}
} else { echo “Berita 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-coba ya.” 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 “Berita tidak ditemukan.”.
Nah, 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. (_zapto dikutip dari srandal.com)
About the Author
15 Comments on “Algoritma dan teknik menangkal SQL injection”
Write a Comment
Gravatars are small images that can show your personality. You can get your gravatar for free today!
Isi dan komentar tanggung jawab masing masing pengirim. Gambar yang ditampilkan dalam artikel tidak selamanya mencerminkan isi artikel atau produk .Hanya dipakai sebagai Ilustrasi berita.


Bagus bgt tekniknya buat pemula seperti saya..thnks
bagus juga artikelnya..^_^
bisa sediain tempat khusus untuk tutorial PHP dunk..
heheuw…
bagus sekali ini artikelnya mas,,,,,
apakah boleh saya meng-copy dan menyebarluaskannya?
sebagai pembelajaran kita bersama….
bole2 monggo dicopy paste tapi tetap sumber dan link KabarIT.com tetep diserta ken ya…. ok bro…!
Repot amat mas… pake aja (int)$_GET['var']; jadi smua variabel akan bernila variabel. kalau tipe string:
if(get_magic_quotes_gpc())
{
$var = stripslashes($_GET['var']);
}
$var = mysql_real_escape_string($var);
tpi teknik yang satu ini kita harus udah konek ke database dulu
lebih aman pake stored procedure meskipun kita input petik satu ( ‘ ) hasil query g bakal jebol
thanks infonya
untuk MasSukma
ini kalo gag salah dikutip dari srandal.com
tapi kenapa kalo ngutip ini bilangnya dari kabarit.com?
yang plig mantep itu,,,,,,

klu ngk mau di gangu
JANGAN PUNYA KOMPUTER!!!!!!!!!!!!!!!
Ha,, HA,, Ha,, Ha,,, HA,,,,
thanks infonya…berguna banget buat pemula seperti saya…
yang plig mantep itu,,,,,,

klu ngk mau di gangu
JANGAN PUNYA KOMPUTER!!!!!!!!!!!!!!!
Ha,, HA,, Ha,, Ha,,, HA,,,,
eh bedanya int() sama intval() apa ya…..
heheehehe…
newbie gan…
wew…
udah nemu cara yang lumayan… =))
$idx=$_GET['id'];
if(!is_numeric($idx)){
$idx=0; //terserah diisi angka brapa,..kalau bisa kasih jah berita/konten favorit
}
bagus juga tuh tutorialya
Useful share,