Selama satu minggu bikin sirah ngelu, ngilu sekaligus bikin badan tambah kuru., akhirnya celah sql injection bisa ditutupi. Banyak cara menuju roma begitu pula banyak cara mencegah sql injection, dan berbagai cara sudah digunakan entah itu regex, mysql_escape_real_string dll rupanya gak mempan. Adakah cara “sakti” yg mempan, mari kita simak perjalanan spiritual berikut ini :
Kami tahu pada awalnya mereka ingin melakukan deface terhadap tampilan awal site***, karena tidak bisa akhirnya mereka melakukan flooding DOS attack..
Langkah pertama yang dilakukan adalah menelusuri include an file yang diinjeksi, kami mulai dari tips_detail.php yang muaranya adalah functions.php di direktori cms/lib/
1. Buat script cleaning segala karakter yang memungkinkan sql injection bisa disusupi seperti ‘,%,[,],\,*,@ dll, Lakukan pemisahan value dimana value yang benar saja yang diambil dan ditampilkan di browser.
2. Buat script untuk filteran input yang harus dimasukkan dan tidak
3. Sebelumnya lakukan pembatasan value sepanjang 20 digit, kemudian buat fungsi intval yang intinya apabila dimasukkan angka lebih dari 20 digit, browser bisa menerjemahkannya menjadi nilai yang dapat dibaca cepat oleh browser
4. Langkah terakhir ambil karakter /* di nilai terakhir ketika penyusup memasukkan sql injectionnya. Hilangkan karakter /* yang merupakan salah satu perintah sql injection untuk melakukan eksekusi.
//masukkan fungsi berikut ke dalam /cms/lib/functions.php
function check_gpc_input($value)
{
$karakter=substr($value,-2,2);
//echo "
nilainya".$karakter."
";
if ($karakter=="/*")
{
die("hayo apaan");
//echo "
nilainya".$karakter."
";
}
if(!empty($value))
{
// truncation
$value = substr($value,0,20);
//echo "nahini".$value;
}
// Stripslashes if magic quotes enabled
if (get_magic_quotes_gpc())
{
$value = stripslashes($value);
//echo "nahini".$value;
}
// jika bukan number
if (!ctype_digit($value))
{
$value = "'" . mysql_real_escape_string($value) . "'";
//echo "nahini".$value;
}
else
{
$value = intval($value);
//echo "
nahini2s".$value."
";
}
return $value;
}
function clean($var){
//echo "testfungsiclean
";
$findme="'";
$var = str_replace("\"","",$var);
$var = str_replace("-","",$var);
$var = str_replace("\\","/",$var);
$var = str_replace("/*","",$var);
$var = strip_tags($var);
$var=explode("'",$var);
//print_r ($var);
$var=$var[0];
//echo "yayya".$var."
";
return $var;
}
Include kan file ini ke dalam semua variable $_REQUEST, $_GET, $_POST, dan $_COOKIE yang berhubungan dengan query dan inputan terutama cid dan id.
Contoh :
$reqid=check_gpc_input($_REQUEST['id']);
$query = "SELECT * FROM " . $NEWS_TBL . " WHERE news_id='" . clean($reqid) . "'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);