Bambang Nurcahyo Prastowo

Bambang Nurcahyo Prastowo

Tenaga Pendidik di Departemen Ilmu Komputer dan Elektronika FMIPA UGM

Mail: prastowo@ugm.ac.id * Web: http://prastowo.staff.ugm.ac.id
Mobile: +62 811-2514-837 * CV singkat

Porting Register Globals

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'];
$dir=$_GET['dir'];
$artikel=$_GET['artikel'];
$posted=$_POST['posted'];
$realname=$_POST['realname'];
$message=$_POST['message'];
$visrev=$_POST['visrev'];
$keycode=$_POST['keycode'];
$adminx=$_COOKIE['adminx'];
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.

Cukup lah bisa dikatakan sebagai pendusta, seseorang yang mengatakan semua yang didengarnya (h.r. Muslim)

Kirim Komentar

Nama:
Website:

Ketik B5CA di
  • 21. umroh murah

    Makasih sudah mau berbagi pak.. nice post

    01-03-17 11:33
  • 20. hafiza

    nice info, visite our website : http://www.hafizabysalma.com/

    01-12-16 08:54
  • 19. hafiza

    nice info, visite our website : http://www.hafizabysalma.com/

    01-12-16 08:54
  • 18. rahasia wanita bijak

    mantab

    http://www.jualtasbrandedmurah.com
    http://www.ratubelanjaonline.com
    http://www.rahasiawanitabijak.com

    12-02-16 05:52
  • 17. tas murah

    okeee

    http://www.jualtasbrandedmurah.com
    http://www.ratubelanjaonline.com
    http://www.rahasiawanitabijak.com

    12-02-16 05:49
  • 16. belanja online

    nice

    http://www.jualtasbrandedmurah.com
    http://www.ratubelanjaonline.com
    http://www.rahasiawanitabijak.com

    12-02-16 05:49
  • 15. tas branded murah

    great info

    http://www.jualtasbrandedmurah.com
    http://www.ratubelanjaonline.com
    http://www.rahasiawanitabijak.com

    12-02-16 05:48
  • 14. Pulau Tidung

    Masih work kah ?

    29-10-14 12:42
  • 13. jj

    ok

    17-12-11 04:50
  • 12. oky

    pak bisa minta tolong editing script????

    11-11-09 10:18
  • 11. prastowo

    test render internal link

    28-02-09 10:12
  • 10. Ahlul

    Untuk solusi lain bisa memakai:

    .htaccess dengan value:

    php_flag register_globals On

    atau dengan php.ini

    register_globals = On

    28-02-09 09:37
  • 9. arya

    kalo kelemahan atau kelebihannya apa ya?

    27-10-08 11:49
  • 8. ;l;l;l;

    lkjlkjljkl

    22-06-07 04:01
  • 7. Bayu

    Terima kasih atas sharing artikelnya, sangat membantu saya pak...

    salam,

    25-05-07 02:39
  • 6. anggi

    bagai mana cara membuat suatu program web...tolong berikan satu contoh...karna saya sedang mempelajari WEB PROGRAMING WITH PHP....tolong berikan satu contoh program dengan alur yg mudah di pahami.
    Anggi_syach@yahoo.com

    Terima Kasih

    22-04-07 11:04
  • 5. prastowo

    Untuk menjalankan script yang memerlukan register global, tiga baris script 1 dimasukkan ke bagian awal file indul (index.php) atau file script yang selalu diincludekan di bagian atas.

    Script 2 tidak ada hubungannya dengan scrip 1. Yang kedua ini kita gunakan untuk migrasi program lama ke program baru. Caranya, tempelkan script tersebut ke bagian atas program seperti script 1. Setelah dijalankan akan muncul sederatan arrray asignment seperti contoh di atas.
    2. Save baris-baris baru ini ke file. Selenjutnya, buang script 2 yang tadi disisipkan dan ganti dengan baris-baris output darn langkah pertama. Dengan demikian semua variabel yang diperlukan sudah kita definisikan sendir di bagian atas program sebagaimana disarankan oleh pakar keamanan sistem komputer.

    18-04-07 12:30
  • 4. rudim

    saya sudah mencoba menyisipkan tiga baris kode di atas, pada awal script. Berhasil sebagian. Tetapi pada sebagian script tetap belum jalan.
    Saya belum jelas cara menjalankan script untuk migrasi di atas. tolong saya bisa dijelaskan lebih detail lagi.Pada penjelasan mulai dari ->function...

    18-04-07 09:16
  • 3. rudim

    saya sudah mencoba menyisipkan tiga baris kode di atas, pada awal script. Berhasil sebagian. Tetapi pada sebagian script tetap belum jalan.
    Saya belum jelas cara menjalankan script untuk migrasi di atas. tolong saya bisa dijelaskan lebih detail lagi.
    Pada penjelasan mulai dari
    fuction...

    18-04-07 09:15
  • 2. Purba

    Wah Pak, pas bgt, saya emang lg nyari2 soal register_global, lg nyoba mambo, di rekomended in sih off tp emang sih jd ada yg gak berfungsi ...

    will try it right away

    11-04-07 09:30
  • 1. prastowo

    Percobaan entry komentar untuk contoh melihat output skrip yang mendaftar variabel cgi.

    06-04-07 11:05