################################################################### MENGURANGI SECURITY HOLES PADA PHP PROGRAMMING Author : KillFinger Email : killfinger@yahoo.com IRC : #SecretColony, #Level9-Team @DAL.net SecretColony Labs N Research Group. ################################################################### Lanjutan php1... 2> Escape charachter pada SQL statements Kesalahan program yang sering terjadi pada bagian ini adalah penggunaan nilai variable yang dapat digunakan user atau URL dalam SQL queery tanpa 'escape karakter' khusus. Perhatikan bagian code dari salah satu script yang digunakan untuk metode authentikasi username dan password dalam form HTML berikut: $query = "SELECT * FROM users WHERE username='" . $username . "' AND password='" . $password . "'"; // fungsi record exist telah di defined sebelumnya pada bagian lain dalam script ini if (record_exists($query)) { echo "Access granted"; } else { echo "Access denied"; } Code diatas akan berjalan apabila diakses dengan 'check.php?username=admin&password=x'. Jika kode tersebut diakses dengan 'check.php?username=admin&password=a%27+OR+1%3Di%271' (dan jika magic_quotes_gpc di disable) maka kondisi passwordnya akan menjadi Password='a' atau 1='1' sehingga user record akan selalu diterima apapun isi paswordnya. Masalah ini dapat dihindari jika variable magic_quotes_gpc di set 'on' pada file php.ini, artinya PHP akan mengeluarkan charachter 'quote' dalam data GET, POST, dan cookie lalu digantikan dengan charachter '\'. Umumnya magic_quotes_gpc di disable karena dapat menyebabkan code yang lain berjalan tidak semestinya. Pemberian data yang berisi echo $username pada bagian contoh code diatas akan mengakibatkan tanda ' akan diganti dengan \'. Variable magic_quotes_gpc tidak akan memprotect nilai variable yang didapat dari database record atau file-file yang apabila seorang malicious user telah memodifikasinya selama program berjalan normal. a> apa yang harus dilakukan Search fungsi queery pada database kamu. Misal, kalau menggunakan MySQL, stringnya penggunaannya adalah fungsi mysql_db_query. b> perbaikan yang mungkin dilakukan - Gunakan fungsi built-in addslashes atau gunakan fungsi escape quote dan backslash dalam pernyataan SQL dengan backslash (\). - Enable magic_quotes_gpc pada php.ini, tapi jangan terlalu mengandaklkan yang satu ini. (peng-enable-an setting ini ketika menggunakan addslashes akan menciptakan error). - Kalau kamu menggunakan variable yang kemungkinan mengandung angka dalam pernyataan SQL, pastikan bahwa benar2 berisi angka. Kamu dapat memilih berbagai macam built-in fungsi PHP termasuk sprintf, ereg, dan is_long, untuk melakukan pengecekan Bersambung ...... ke php3(Jangan percaya dengan Global Variable) *NOTE: PHP adalah interpreter language yang syntaxnya hampir sama dengan C language. Kalau kamu sudah familier dengan salah satunya maka kemungkinan kamu tidak akan kesulitan dalam menggunakan keduanya. ;> Artikel ini adalah artikel bersambung. Semoga berguna untuk meningkatkan security pada code PHP kita dan meningkatkan pengetahuan programming kita. Salam buat A_BlAcK-LisT, Acetosal, jhon angga, ryan_the, ucoxxx, AcCezZdENieD dan KIDS_KIDS. Special buat teman2 yang tidak bisa disebutkan satu persatu di #SecretColony, #Level9-Team @t DAL.Net. Best Regs KillFinger Go link to: http://www.scan-associates.net/papers/sql_injection_walkthrough.txt