Filtering Code Sql terhadap Sql Injection

=================================================
$id=$_GET['id'];
$data = mysql_query("SELECT * FROM news WHERE author='$id' ORDER BY date")
----------
pesan errornya :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''r00t'' ORDER BY date' at line 1
================================================== 
mohon maaf karena kali ini ngk di tampilkan pake gambar, soalnya lagi kehabisan quota jadi susah upload gambar... ^_^
ok, ngk lama2 basa-basinya lanjut aja ke pokok pembahasannya, code di atas adalah sebuah code php yang mana melakukan pengambilan nilai terhadap database mysql. Pesan error adalah jika kita melakukan serangan injection code pada parameter ID
sebagai contoh serangan injection code seperti : http://www.sikorban.com/index.php?id=23'
cuma kali ini bukan pembahasan gmn cara mengeluarkan isi databasenya cuma kita akan memberikan filter data supaya tidak terjadi injection code sql.
pada code terlihat terjadi pengambilan data dari ID langsung di exekusi ke database.ibaratkan jalan raya tidak adanya lampu merah atau persimpangan, apa saja yang masuk di exekusi pada mysql_query sehingga saat pengexekusian terjadi error
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''r00t'' ORDER BY date' at line 1
ada beberapa trik yang di pakai untuk melakukan filter dan cara paling simpel adalah memberikan (int) pada id sehingga ID = Variabel Int dengan code nya adalah sebagai berikut : 
Sebelum Patch
$id=$_GET['id'];
setelah patch
$id=(int)$_GET['id'];
apakah dengan cara ini efesien.  Untuk menghindari  injec code dengan memberikan tanda kutip 1 (') tidak akan berfungsi lagi, karena nilai ID adalah INT tapi jika ada parameter minus (-) maka patch ini tidak berfungsi karena nilai INT juga terdapat nilai minus nya.
Jadi untuk itu kita musti melakukan filter data minus dan nilai selain variabel.
terdapat juga beberapa cara untuk itu, yaitu salah satunya adalah memberikan filtering seperti berikut ini :
error_reporting(0);

function filtering($id){
$idx = mysql_real_escape_string($id);
if (!ctype_digit($idx) || $idx < 0){
exit;
} else {
return $id;
}
}

Penjelasannya :

Memberikan perintah “error_reporting(0);” adalah untuk menghilangkan pesan error yang terjadi : “You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''r00t'' ORDER BY date' at line 1” error ini akan hilang.
Dan untuk code :

function filtering($id){
$idx = mysql_real_escape_string($id);
if (!ctype_digit($idx) || $idx < 0){
exit;
} else {
return $id;
}
}
adalah sebuah filter dengan idx adalah merupakan data dari mysql_real_escape_string dari ID.nanti akan di cek apakan parameter yang di masukan adalah karakter selain angka dan mempunyai nilai <0 . Ini adalah yang nantinya untuk melakukan filter nilai negative (-) jika parameter ID mengandung angka dan memiliki nilai negative (-) maka akan di tutup dan akan memanggil parameter ID.
Idx=filtering($id); <<< idx parameter filter dari id.

Semoga sukses sekian penjelasannya dan membantu anda dalam patch codenya.. Semoga sukses selalu..
Thanks TO :
Kepada Allah Yang maha kuasa.
Kepada Sarang Gane
Kepada Kang Nathan

Berikan Komentar yang bermanfaat dan sehat. Conversion Conversion Emoticon Emoticon