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