Beberapa waktu yang lalu sempat kita baca mengenai situs KPU yang di-deface oleh orang yang tidak bertanggung jawab dan bug pada web application yang digunakan untuk mengeksploitasi kelemahan sistemnya adalah dengan menggunakan SQL injection, padahal bug ini sebenarnya sudah lama sekali. Sebenarnya ini hanya permasalahan sepele, untuk menghindari web application kita di-deface dgn SQL injection ada beberapa hal yang bisa dilakukan:
1. Gunakan wrapper untuk eksekusi sql (file disertakan)
2. Gunakan validasi POST dan GET variable sebelum dieksekusi dengan SQL command
3. Replace POST dan GET variable yang berisi karakter-karakter yang bisa mengacaukan SQL (database) sebelum dieksekusi dengan SQL command.
Misal kita punya tabel:
CREATE TABLE gbook ( id int(11) NOT NULL auto_increment, name varchar(15) default NULL, komen varchar(text), PRIMARY KEY (id) ) TYPE=MyISAM;
Untuk view content dgn id = 3, biasanya kita tulis pada browser seperti berikut ini.
http://foo.com/index.php?action=view&id=3Untuk memahami nya, mari kita pilah2 dulu url tadi.
-- action=view, adalah variabel $_GET dengan key = action dan value = view yang akan mengeksekusi fungsi viewContent()
-- id =1, adalah variabel $_GET dengan key = id dan value = 1 yang akan dieksekusi dalam SQL command.
OK, sekarang penulis akan berikan file-file untuk mencoba kasus di atas, ada tiga file yaitu seperti yang terlihat di bawah ini.
- config.php, merupakan file yang berisi konfigurasi database yang bisa Anda set sesuai pada komputer Anda.
- classdb.php, merupakan file yang berisi operasi terhadap database (MySQL) - index.php, merupakan file utama yang akan dijalankan nantinya.
Sekarang mari kita coba sebagai berikut:
http://index.php?action=view&id='1hasil yg keluar adalah = Bad Request
Penulis pernah mencoba kasus serupa di Gramedia (bulan Januari 2004) memakai software pencariannya, input search yg penulis masukkan adalah ' (karakter single quote), hasil yg keluar adalah -- komputernya hang --, dengan pesan: divide by zero.
Jadi kesimpulannya SQL injection dan XSS bisa diantisipasi hanya dengan ketelitian dalam programming. Itu aja sih.
Demikanlah penjelasan mengenai tips antisipasi SQL injection pada PHP (dengan database MySQL), semoga bisa bermanfaat bagi kita semua.
Terimakasih.