SQL injection !

Akhirnya kena juga batunya :p, itulah kira-kira ungkapan yang tepat karena tidak teliti dan menunda apa yang seharusnya sudah dapat dikerjakan saat itu juga. Kejadian ini memang berlangsung beberapa minggu yang lalu tapi baru hari teringat. Ya.. ya... hal yang saya anggap kecil sampai tidak pernah saya pikirkan tentang mysql_escape_string() dan mysql_real_escape_string(). So, ada apa dengan mysql_escape_string() dan mysql_real_escape_string(). Keduanya adalah fungsi build in PHP4 dan PHP5 untuk meng-Escape special characters dalam string yang digunakan dalam SQL statement. Tapi yang membedakan mysql_real_escape_string() digunakan harus lewat koneksi mysql dulu dengan fungsi mysql_connect().
"A MySQL connection is required before using mysql_real_escape_string() otherwise an error of level E_WARNING is generated, and FALSE is returned. If link_identifier isn't defined, the last MySQL connection is used Quote from PHP Manual"
ingat keduanya tidak mengescape karakter '%' dan '_' (underline). Next..... akibat mengabaikan fungsi ini, salah satu client web saya memberitahukan bahwa webnya kena "hack" WOW.... Setelah saya periksa ternyata kena serangan SQL Injection :p. itu karena kelalaian saya sendiri tidak mempedulikan fungsi diatas. Sebetulnya hampir 1 tahun yang lalu saya mendapat info dari rekan saya 'scut' k-elektronik, beliau menginformasikan salah satu situs saya ada yang bolong bisa di SQL Injection hehehehehe tapi saya tidak terlalu tanggapi serius karena situs yg dimaksud versi mysql dan phpnya blum di updagrade dan server tersebut sudah siap-siap dipensiunkan (pensiun sejak 2007 awal kalo ndak salah :p). Mungkin ada yang bingung bagaimana sebuah situs bisa kena SQL Injection (seperti kejadian stus KPU Waktu pemilu 2004). Yang jelas sebuah situs bisa kena SQL injection diakibatkan diantaranya karena :
  1. Password admin untuk back-END atau bagian control panelnya tidak di encrypt menggunakan hash seperti MD5
  2. variable string untuk Query SQL tidak di escape
Dan bagaimana mengatasi supaya tidak kena SQL injection, sangat disarankan untuk menggunakan fungsi mysql_escape_string() atau mysql_real_escape_string(). Seandainya saya tidak menggunakan fungsi tadi gimana ?? Trus dimana saya letakkan fungsi tersebut ?? apakah disemua variable ??? Untuk lengkap dan panjang lebarnya nih disini http://www.php.net/manual/en/security.database.sql-injection.php

Komentar