Belakangan ini diskusi di milis phpug (phpug [at] yahoogroups [dot] com) diramaikan beberapa pertanyaan yang masalahnya bermuara pada sebuah masalah klasik, register_globals. Seperti apakah mahluk yang bernama register_globals itu?
Sang Register Globals
Register_globals adalah salah satu petunjuk konfigurasi PHP yang berfungsi untuk menentukan apakah variabel-variabel EGCPS (Environment, GET, POST, Cookie, Server) akan didaftarkan sebagai variabel global atau tidak.
Apabila petunjuk register_globals diisi dengan nilai on, maka variabel-variabel EGCPS dapat diakses langsung dengan $namavariabel. Sedangkan bila diisi dengan off, maka variabel-variabel EGCPS harus diakses melalui larik superglobals yang terdiri dari $GLOBALS, $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES, $_ENV, $_REQUEST, dan $_SESSION. Sehingga dengan register_globals=off variabel namavariabel yang dikirim melalui metoda POST, hanya dapat diakses dengan $_POST['namavariabel'] (disarankan dengan cara ini), $_REQUEST['namavariabel'], atau $GLOBALS['namavariabel'] (bila tidak ada jenis variabel lain dengan nama sama yang prioritasnya lebih tinggi; baca isian manual mengenai petunjuk konfigurasi variables_order).
Superglobals sendiri baru muncul pada PHP versi 4.1.0, untuk mengantisipasi masalah keamanan dalam penggunaan register_globals. Dan sejak PHP versi 4.2.0, nilai default untuk petunjuk konfigurasi register_globals adalah off.
Berikut adalah contoh script yang mirip dengan contoh dalam manual penggunaan register_globals:
<?php
// register_globals=on
// sudah_login adalah sebuah fungsi untuk memeriksa status pengguna
// mengebalikan nilai true bila pengguna sudah berhasil login
if (sudah_login()) {
$authorized = true;
}
// karena sebelumnya variabel $authorized tidak pernah diisi dengan
// nilai false, maka semua pengguna semua pengguna yang mengakses
// file ini dengan namafile.php?authorized=1 akan dianggap sudah
// berhasil login
if ($authorized) {
include “/data/sangat/rahasia.php”;
}
?>
Bandingkan dengan script ini:
<?php
// register_globals=off
session_start();
// sudah_login adalah sebuah fungsi untuk memeriksa
// status pengguna mengebalikan nilai true bila
// pengguna sudah berhasil login
if (sudah_login()) {
$_SESSION['authorized'] = true;
}
// sekalipun pengguna mengakses dengan
// namafile.php?authorized=1 pengguna tidak dianggap
// sudah login (kecuali benar-benar sudah login).
// karena parameter authorized=1 tidak dapat diakses
// melalui $_SESSION['authorized']
if ($_SESSION['authorized']) {
include “/data/sangat/rahasia.php”;
}
// peringatan:
// script ini mungkin akan menghasil ‘warning’ bahwa
// variabel $_SESSION['authorized'] belum didefinisikan.
?>
Pemula Kekurangan Referensi Berbahasa Indonesia
Pertanyaan-pertanyaan yang membuat beberapa anggota milis phpug snewen (begitu kata seorang anggota), kebanyakan dilontarkan oleh pemula dalam pemrograman PHP. Dan sepertinya (ini dugaan), para pemula lebih mengandalkan buku-buku panduan berbahasa Indonesia yang bisa dibilang usang daripada manual PHP yang lebih lengkap dan selalu diperbaharui namun berbahasa Inggeris. Tidak jarang muncul pertanyaan seperti “Bagaimana cara menggunakan fungsi x” di milis, padahal di dalam manual PHP informasi mengenai cara penggunaan fungsi x tersebut dibahas secara detail beserta contoh-contohnya.
Mengenai masalah register_globals, buku-buku panduan mengenai PHP berbahasa Indonesia yang beredar sepertinya masih mengacu pada kondisi register_globals=on. Seorang anggota milis mengungkapkan keheranannya akan hal ini, mengingat buku-buku tersebut sebenarnya diterbitkan setelah PHP versi 4.1.0 dirilis.
Saya pernah berencana untuk turut serta menterjemahkan manual PHP ke dalam bahasa Indonesia, tapi ternyata tidak semudah menterjemahkan lirik lagu. Ada banyak halaman yang harus diterjemahkan dan terlalu banyak istilah yang sulit untuk diterjemahkan. Beberapa orang memang lebih mudah mencerna referensi berbahasa Inggeris dari pada terjemahannya dalam bahasa Indonesia, mungkin termasuk saya.
Jadi, <update>untuk saat ini</update> pelajari bahasa Inggeris sebelum mempelajari manual PHP :)
Saya mau meng-upgrade script dari register globals on ke register globals off tetapi tidak dapat mendeteksi bagian mana Get, Post, session, dsb.
Apakah ada cara untuk menyingkat penelurusan, sekaligus menimpa code-code lama dengan code baru? Sehingga script tetap aman alias berstatus register globals off.
Terima kasih
makasih petunjuknya…
log mu aku simpan di my log list…
punya manual php dalam b.indonesia ga? klw ada mysql nya boleh donk, klw ga di mana gw bisa download yang b.indonesia