SQL Injection Patching for PHP + MySQL

Ini cara sederhana untuk patch bug SQL Injection Flaw di halaman dinamis PHP + MySQL.

-----------------------------------------

[Pendahuluan]
Halaman dinamis adalah halaman yg isinya bisa berubah-ubah sesuai dengan parameternya. Misalnya index.php?id=1 maka isi dari halaman tersebut akan sesuai dengan parameter (kalau disni id) yang dimasukkan yaitu 1.

Biasanya orang membuat halaman dinamis di PHP menggunakan MySQL untuk bisa koneksi dengan database. Dan terkadang query SQL dalam file php yang bersangkutan tidak dibatasi sehingga memungkinkan seseorang menginjeksi query sql lewat parameter di file php tersebut. Kalau soal sql injection sendiri mungkin bisa liat trit lain yang sudah membahasnya sendiri.

[Bug]
Biasanya halaman dinamis kira-kira seperti ini kodenya untuk membaca parameter dan mengkoneksikannya dengan database.
$id = $_GET['id'];
$db_query = mysql_query("SELECT * FROM namadb WHERE id=$id")
Karena $id tidak difilter maka seseorang bisa memasukkan query di situ sehingga akhirnya dijalankan oleh mysql_query.

[Patch]
Kita bisa memfilternya. Kira-kira kodenya seperti ini.
   error_reporting(0);
   
      function filtering($id){
         $idf = mysql_real_escape_string($id);
         if (!ctype_digit($idf) || $idf < 0){
            exit;
         } else {
            return $id;
         }
      }

      $id = $_GET['id'];
      $idf = filtering($id);
      $db_query = mysql_query("SELECT * FROM namadb WHERE id=$idf");
error_reporting(0) berguna agar mysql tiidak mengeluarkan pesan error apabila terjadi error. Selanjutnya function filtering berguna untuk memfilter parameter masukan. Disini digunakan fungsi mysql_real_escape_string. Lalu dicek apabila parameter masukan mengandung karakter selain angka dan mempunyai nilai < 0 (biasanya orang akan me-minuskan parameter dalam melakukan sql injection) maka tidak akan dilanjutkan.

[Penutup]
Masih banyak cara lainnya. Ini hanya salah santu contoh. Sesuaikan saja dengan kode dari situs yang bersangkutan. Apabila ada yang salah mohon dikoreksi. :)
Ranking: 5
 
© Andrian21 All Rights Reserved