Friday, September 21, 2012

Patching bug PHP SQLI


Berikut berbagai macam langkah untuk mengamankan web anda dari serangan SQL injection pada web yang menggunakan PHP.
-          Menggunakan preg_match
Sumber yang bisa anda kunjungi adalah http://php.net/manual/en/function.preg-match.php. preg_match atau Perform a regular expression match merupakan cara mencocokan list kata yang telah di definisikan di sebuah variable dengan kata yang akan di masukan oleh attacker ketika akan melakukan injeksi terhadap web. Jadi list-list cheat MySQL dalam melakukan aksi SQL Injection akan di definiskan ke sebuah variable lalu di berikan aksi selanjutnya. Berikut contoh program nya:
$berbahaya = array("union", "concat", "base64");
$gabungsemua = implode("|",$berbahaya);
if((strlen($_SERVER['REQUEST_URI']) > 255) || (preg_match("/".$gabungsemua."/i",$_SERVER['REQUEST_URI']))){
echo "Akses Dilarang...!!!";
@header("HTTP/1.1 414 Request-URI Too Long");
@header("Status: 414 Request-URI Too Long");
@header("Connection: Close");
@exit;
}
?>
-          Menggunakan absolute integer,  dimana script ini hanya akan mengolah input yg berupa angka saja.

$postid = abs((int) $_GET['postid']);
 ?>

-          Menggunakan fungsi  stripos
Untuk fungsi stripos link yang bisa anda kunjungi adalah di http://www.php.net/manual/en/function.stripos.php. mengapa menggunakan stripos? karena stripos membedakan antara karakter huruf besar dengan huruf kecil (Case- insensitive). Jadi ketika attacker mencoba membypass MySQL dengan memasukan pattern union yang berbeda dengan biasanya, contoh :  “union+all+select” berbeda dengan “uniOn+all+sElEct”. Berikut contoh penggunaan fungsi stripos dalam pencegahan SQLI.
?>
if (strlen($_SERVER['REQUEST_URI']) > 255 || stripos($_SERVER['REQUEST_URI'], "concat")|| stripos($_SERVER['REQUEST_URI'], "union") ||
strpos($_SERVER['REQUEST_URI'], "base64")) {
echo "Akses forbidden";
@header("HTTP/1.1 414 Request-URI Too Long");
@header("Status: 414 Request-URI Too Long");
@header("Connection: Close");
@exit;
}
?>


Penjelasan singkat dari source code di atas;
if (strlen($_SERVER['REQUEST_URI']) > 255  || strpos($_SERVER['REQUEST_URI'], "concat") || strpos($_SERVER['REQUEST_URI'], "union") || strpos($_SERVER['REQUEST_URI'], "base64"))

“Jika variabel di URL lebih dari 255 atau (tanda || dibaca atau) ada kata "concat", "union" dan "base64".”
echo "Akses ditolak"; @header("HTTP/1.1 414 Request-URI Too Long"); @header("Status: 414 Request-URI Too Long"); @header("Connection: Close"); @exit;
Maka akan di tampilkan peringatan  "Akses di tolak" .

Sumber :
-          http://google.com
-          http://exploit-db.com
-          http://devilzc0de.org/forum
-          http://www.php.net

Newer Post Home