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
require_once(”connection.php”);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.
$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'];
}
?>
Disana ada 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).
Lantas, bagaimana cara penanggulangannya. Cara mudahnya kita modifikasi skrip diatas seperti berikut ini:
require_once(”connection.php”);Nah, skrip diatas kira-kira mempunyai arti algoritma seperti ini:
// –> validasi $_GET['id']
if(!ctype_digit($_GET['id'])){
die(””);
}
$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 “Berita tidak ditemukan.”; }
?>
- Pertama-tama, validasi $_GET['id'], jika ia bernilai Integer(angka), maka lanjutkan. Jika tidak, tampilkan peringatan “Jangan coba-coba ya.” dan kembali kehalaman selanjutnya.
- Lakukan Query
- 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.”.

Post a Comment Blogger Facebook