Cara Menutup Bug SQL Injection (SQLi)


Cara Menutup Bug SQL Injection. SQL Injection adalah sebuah teknik yang menyalahgunakan sebuah celah keamanan yang terjadi dalam lapisan basis data sebuah aplikasi. Celah ini terjadi ketika masukan pengguna tidak disaring secara benar dari karakter-karakter pelolos bentukan string yang diimbuhkan dalam pernyataan SQL atau masukan pengguna tidak bertipe kuat dan karenanya dijalankan tidak sesuai harapan. Ini sebenarnya adalah sebuah contoh dari sebuah kategori celah keamanan yang lebih umum yang dapat terjadi setiap kali sebuah bahasa pemrograman atau skrip diimbuhkan di dalam bahasa pemrograman lain.

Ada beberapa tools yang bisa kita gunakan untuk melakukan SQL Injection, misalnya :

1. SQL Map

SQL Map adalah tools opensource yang mendeteksi dan melakukan exploit pada bug SQL injection secara otomatis. dengan melakukan serangan SQL injection seorang attacker dapat mengambil alih serta memanipulasi sebuah database di dalam sebuah server.

2. Havij

Havij adalah alat untuk melakukan SQL Injection yang menguji penetrasi untuk menemukan dan mengeksploitasi kerentanan SQL Injection pada suatu halaman web.


Karena tutorial melakukan SQL Injection udah banyak berkeliaran di google, kali ini saya mau membahas tentang bagaimana cara menutup bug yang sangat rawan ini.

Contoh script yang vuln terhadap SQLi:
<?php 
include "admin/config.php";
$id_anu = $_GET['id_anu'];
$result = mysql_query("SELECT * FROM anu where id_anu ='$id_anu' ");        
   while($row = mysql_fetch_array($result)){
?>


Di source code diatas terlihat tidak adanya filter untuk karakter seperti ('), (-), (--) sehingga bisa disisipi dengan perintah SQLi. Lalu, bagaimana cara menutup bug tersebut? Kali ini saya akan menggunakan easy method untuk menutup bug tersebut.

1. Memberi filter pada karakter yang akan dimasukkan ke dalam query. Kita halau karakter seperti (-) terlebih dahulu.
if($id_anu < 0) {
   echo "Patched.";
   exit;
}
//Definisi logika: Jika nilai $id kurang dari 0, maka akan tampil "Patched."   |   Mencegah karakter (-).
2. Memberi perintah is_numeric
if(!is_numeric($id_anu)) {
   echo "Patched.";
   exit;
}
//Definisi logika: Jika nilai $id bukan golongan darin numeric atau angka, maka akan tampil "Patched."
3. Memberi fungsi mysql_real_escape_string.
mysql_real_escape_string adalah fungsi PHP yang digunakan untuk memberi backslash di beberapa kode untuk ditampilkan pada halaman, namun saat menyimpan menuju sql, kode akan tetap normal tanpa ada backslash.
$id_anu = mysql_real_escape_string($_GET['$id_anu']);

Special Thanks for,
x'1n73ct
Share:

2 komentar:

  1. Gan, apa CMS-2 yg terkemuka sudah banyak yg menutup bug ini?

    BalasHapus
    Balasan
    1. Menutup sih udah, tapi masih ada kesempatan. Bisa aja. Kalo mau tau, coba mampir ke cxsecurity.com atau web2 tempat submit bug lain. Semoga membantu.

      Hapus