Langsung aja..
Ini patch untuk mencegah serangan SQL Injection di halaman dinamis pada PHP + MySQL. Biasanya halaman dinamis ini
bentuknya kayak gini http://uhui.com/vuln.php?id=[Input_Angka]
Bentuk umum kode di halaman dinamis php untuk membaca database melalui MySQL :
PHP Code:
$id = htmlentities($_GET['id']); $variabel = mysql_query("select *from tabeltarget where idtarget='$id'")
Nah, untuk mencegah hal tersebut sebaiknya kita memfilter inputnya sebelum diproses dengan SQL.
Contoh kode filternya :
PHP Code:
error_reporting(0);
class filter{
function filtering($id){ $idfilter = mysql_real_escape_string($id);
if (!ctype_digit($idfilter))
{
echo "Can't process your request, dude :P ";
exit;
}
else if ($idfilter <= 0)
{
echo "Can't process your request, dude :P ";
exit;
}
else
{
return $id;
}
}
} $Filter2 = new filter(); $id = htmlentities($_GET['id']); $secured = $Filter2->filtering($id); $variabel = mysql_query("select *from tabeltarget where idtarget='$secured'")
Pertama-tama menggunakan error_reporting(0); . Kode tersebut digunakan untuk mendisable error reporting sehingga jika terjadi error tidak keluar pesan error.
Selanjutnya variabel $id disaring dulu menggunakan mysql_real_escape_string yang berfungsi untuk menambahkan slash (\) apabila ada tanda kutip pada input $id.
Setelah disaring dengan mysql_real_escape_string, disaring lagi dengan melakukan pengecekan apakah inputnya berupa angka atau bukan dengan menggunakan kode !ctype_digit . Jika ternyata bukan angka maka akan ditolak. Selain pengecekan input apakah angka atau bukan, dilakukan juga pengecekan apakah inputnya sama atau lebih kecil dari 0 (minus) jika iya maka akan ditolak.
Abis itu baru deh aplikasikan ke syntax SQL-nya.
Untuk lebih jelasnya silahkan baca ulang kode sebelum difilter dan setelah difilter berkali-kali sampai paham.
No comments:
Post a Comment