Blog info

Selasa, 06 Desember 2016

AppServ dan XAMPP





Assalamualaikum, 
bagi yang pernah menjumpai pas kita meng coding/penulisan kode program di appserv terus kalau di jalankan di xampp ternyata project yang kita buat tidak bisa di jalankan di xampp wah bahaya ya kalau begitu, hehehe, tenang ni tak kasih tau jawabanya ????
Sebenarnya, di antara kedua web-server package tersebut (AppServ dan XAMPP, setidaknya untuk versi yang digunakan saat kasus ini terjadi) bisa dibilang tidak ada yang salah. Akan lebih brutal lagi kalau langsung men-judgement bahwa AppServ lebih baik dari XAMPP, atau XAMPP lebih ruwet dibanding AppServ, dsb. Permasalahan yang ada sebenarnya hanya terletak pada satu baris setting saja di file php.ini milik masing-masing paket. Satu baris ???!!! Ya, satu baris saja. Pada php.ini terdapat setting register_globals yang bisa berisi value On atau Off. Faktanya, pada AppServ hingga versi 2.5.10, register_globals bernilai On, dan pada XAMPP (mungkin sejak versi awal, hingga versi 1.7.1) register_globals selalu diset ke Off.
register_globals menentukan apakah PHP me-register variabel dalam kelompok EGPCS (Environment, GET, POST, Cookie, Server) sebagai variabel global atau tidak. Artinya, jika register_globals bernilai On, variabel dalam kelompok EGPCS tersebut akan dapat langsung diakses dengan cara memanggil nama variabelnya secara langsung, terlepas dari sumber variabel tersebut, apakah dari form HTML dengan method POST, GET, ataukah dari URL, atau bahkan dari Session. Pada kondisi ini, jika kita ingin membaca variabel dari form submission yang menggunakan method POST maka kita masih bisa secara langsung memanggilnya dengan (misal) :

if (isset($username) && (trim($username) != "")) {

Kode tersebut menunjukkan satu celah keamanan yang cukup signifikan, karena kode program tidak
secara tegas memaksudkan variabel yang akan diproses adalah variabel “username” yang berasal
dari pengiriman form dengan method POST, sehingga bisa dengan mudah di-override dengan
mengirimkan sesuatu via URL, misal proses_login.php?username=blablabla karena variabel
yang berasal dari POST, GET, maupun ENV akan dianggap sama saja. Parahnya lagi, banyak
sekali tutorial-tutorial PHP yang
beredar menggunakan teknik ini, dengan mengasumsikan bahwa register_globals dalam setting On.
Tentu saja, jika kode program semacam itu dijalankan pada XAMPP, yang secara konsisten menggunakan setting Off pada register_globals, variabel yang digunakan tidak akan dikenali, atau dianggap tidak ada. Hasil dari jalannya program pun tidak seperti yang diharapkan. Lantas bagaimana cara mengatasinya ? Satu-satunya cara yang penulis sarankan adalah untuk tertib dalam menuliskan kode program, dan memanfaatkan superglobals. Superglobals adalah variabel built-in pada PHP yang selalu tersedia pada semua scope/jangkauan, tanpa perlu dideklarasikan, dan lebih penting lagi, tanpa tergantung dengan setting apakah register_globals bernilai On atau Off. Dengan teknik ini, kode yang kita buat akan lebih adaptif dengan setting server, entah pakai register_globals diset ke On maupun Off. Superglobals, yang diperkenalkan mulai PHP versi 4.1.0 (wah, sudah lama banget) terdiri atas variabel array berikut :
  • $GLOBALS
  • $_SERVER
  • $_GET
  • $_POST
  • $_FILES
  • $_COOKIE
  • $_SESSION
  • $_REQUEST
  • $_ENV
Cara pemakaiannya relatif mudah, namun yang biasanya cukup sulit adalah
mengubah kebiasaan. Jika Anda terbiasa mengecek session “username”
untuk mengecek user yang bersangkutan sudah login atau belum menggunakan:
if (isset($username)) {

echo "Selamat datang, " . $username;

}
mulai sekarang gunakanlah superglobals $_SESSION jika Anda memang 
benar-benar bermaksud mengecek variabel session, sehingga kode di atas 
bisa diubah menjadi :

if (isset($_SESSION[username])) {

echo "Selamat datang, " .  $_SESSION[username];

}

Karena jika tidak, pada kasus contoh pertama (tidak menggunakan 
superglobals) Anda akan mudah “ditipu” oleh pengakses yang  tidak punya 
account atau bahkan tidak login, hanya melalui variabel di URL saja. 
Begitu juga untuk variabel yang lain, Anda bisa membuat analogi sendiri 
untuk pemanfaatannya. Setelah membaca artikel ini, sebaiknya Anda mulai 
bereksperimen dengan berbagai kondisi dan contoh kasus, mengenai efek 
dari digunakannya nilai yang berbeda pada setting register_globals.


Update:


Sejak PHP versi 5.3.0 (yang juga menjadi paket pada XAMPP mulai versi 1.7.2),
setting register_globals dianggap
 “deprecated”, alias dihilangkan dari fitur PHP. Sebelumnya, sejak PHP 
versi 4.2.0, setting default untuk register_globals adalah selalu Off. 
Entah apa pertimbangan dari pengemas AppServ yang memutuskan untuk 
membuatnya menjadi On secara default.
Share:

Services

About Me

Foto saya
makassar, Sulawesi Selatan, Indonesia
Tidak ada yang spesial jadi tidak perlu dijelaskan

Cari Blog Ini

Arsip Blog