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.
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 yangberedar 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 menggunakanif (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:
Wahh terima kasih penjelasannya kang
Posting Komentar