Staf Pengajar pada Lab Elektronika dan Instrumentasi, Universitas Gadjah Mada
Artikel pendek ini saya tulis sehubungan dengan masih banyaknya pertanyaan tentang porting program-program PHP lama yang masih mengasumsikan register global on ke web hosting yang tidak memasang opsi register globalnya pada posisi off.
Pada awal perkembanganannya, sistem pemrograman PHP memberi kemudahan pada pengguna dengan memasukkan variabel semua parameter masukan dari web browser bagi dengan metoga GET, POST maupun COOKIE secara otimatis sehingga nama-nama variabel parameter tersebut langsung bisa dirujuk namanya pada skrip action. Karena PHP tidak membedakan sumber value variabel apakah dari GET, POST atau COOKIE, maka value untuk parameter dari COOKIE atau POST misalnya dapat disuntik dengan memanfaatkan pengetikan URL yang memuat pengisian nilai parameter GET. Apabila kita berhati-hati, otomatisasi pengisian variabel yang disebut register globals ini tidak selalu berakibat fatal namun secara umum dinilai membuka lubang keamanan cukup tinggi.
Pada sistem web server dengan fasilitas PHP yang baru, opsi register globals dimatikan by default. Banyak sistem-sistem program PHP lama menjadi tidak berfungsi karena pad umumnya mengandalkan register globals. Agar dapat berfungsi kembali, register globals dapat disimulasikan dengan menyisipkan
//script 1: simulasi register globals
foreach ($_GET as $key => $value) ${$key} = $value;
foreach ($_POST as $key => $value) ${$key} = $value;
foreach ($_COOKIE as $key => $value) ${$key} = $value;
//end script 1 di awal setiap program yang menerima parameter-parameter CGI tersebut. Perlu saya ingatkan kembali bahwa tindakan mematikan register globals dilakukan untuk menutup lubang keamanan yang mungkin ada pada program-program lama kita. Karena itu, membukanya kembali dengan skrip tersebut beresiko terbukanya kembali lubang keamanan yang diakibatkan oleh register globals tersebut.
Untuk memperbaiki program, kita harus menelusuri semua variabel cgi global yang digunakan dalam sistem program php kita yang perlu disisipkan di awal program dalam bentuk
$namavar = $_POST'namavar';untuk setiap parameter COOKIE, POST dan GET. Untuk sistem yang panjang, penelusuran tersebut bisa makan waktu cukup lama untuk bisa mendapatkan semua variabel yang dibutuhkan. Untuk mempercepat pekerjaan migrasi register globals tersebut, silakan coba script berikut ini:
//script 2: menggali nama-nama variabel yang digunakan
function print_global($mtd, $key, $value){
print "$$key=$_$mtd"."'$key';n";
}
foreach ($_GET as $key => $value) print_global("GET",$key,$value);
foreach ($_POST as $key => $value) print_global("POST",$key,$value);
foreach ($_COOKIE as $key => $value) print_global("COOKIE",$key,$value);
//end penggalian nama variabel Sisipkan di awal semua program action. Jalankan programnya dan copy tambahan teks program di bagian awal program tersebut untuk di pastekan sebagai bagian awal dari program-program action yang bersangkutan. Sebagai contoh, program tersebut saya sisipkan dibagian atas modul auth.php website ini dan kemudian saya coba isikan komentar artikel ini. Hasilnya pada bagian atas muncul tambahan teks:
Contoh hasil penggalian nama variabel:
$modul=$_GET'modul';Untuk selanjutnya pendefinisian variabel-variabel ini bisa ditempatkan dibagian atas auth.php tersebut untuk mendapatkan kembali nilai variabel yang dihilangkan oleh setting off dari register globals. Selamat mencoba.
$dir=$_GET'dir';
$artikel=$_GET'artikel';
$posted=$_POST'posted';
$realname=$_POST'realname';
$message=$_POST'message';
$visrev=$_POST'visrev';
$keycode=$_POST'keycode';
$adminx=$_COOKIE'adminx';

KATEGORI
Print Artikel
Kirim ke Teman
Save as PDF