Kamis, 01 November 2012

Antara XAMPP atau APPSERV

Selamat malam teman-teman semua, di malam yang dingin ini saya akan memosting mengenai articel yang membahas tentang XAMPP atau APPSERV wau kelihatanya menarik bukan, hehehe, dari kedua software ini merupakan sebuah server lokal yang sama-sama di gunakan untuk server, terus apa yang ingin kita bahas ya? hehe, ok jangan bingung dulu kawan, hehe, langsung ke tkp sob, mungkin bagi yang pernah main dan berkecimpung di dunia pemrogramman web tentu tidak asing dengan software dua ini yang populer digunakan.
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.

1 komentar:

MS Wijaya mengatakan...

Wahh terima kasih penjelasannya kang

Posting Komentar

◄ Posting Baru Posting Lama ►
 

Chat YM

Administrator
Status YM

Copyright © 2013. Rorik Setya Budi - All Rights Reserved