Efek Register Global On pada Security PHP

Posted: 25 September 2010 in Pemrograman Web, PHP, Security

Pada tulisan sebelumnya saya sudah menjelaskan bahwa salah satu lubang keamanan pada PHP adalah Register Global yang diset ON. Lalu bagaimana pengaruhnya? Apapula perbedaan yang dihasilkan jika Register Global ON atau OFF?

Setelah melakukan pencarian kesana kemari, akhirnya saya dapatkan juga jawabannya dari sebuah website yang beralamat di http://www.aefil.com/ . Demi menghormati jasa penulisnya disini saya tidak akan mengutip semua tulisannya, tapi hanya beberapa yang saya anggap menarik saja. Untuk artikel selengkapnya silahkan klik link yang saya berikan diatas.

Indikasi Terkena Pengaruh Register Global

Berikut beberapa contoh pertanyaan yang berhubungan dengan masalah register globals, diantaranya?

  1. Aplikasi saya dapat berjalan di localhost, tapi ketika saya upload di Internet, kok gak bisa jalan?
  2. Aplikasi dapat berjalan di laptop/komputer saya dengan baik, tapi ketika saya jalankan di komputer teman/kantor saya, kok gak bisa jalan?
  3. Aplikasi login saya kok gak bisa berfungsi, padahal username dan passwordnya sudah benar dan sesuai dengan yang ada dibuku?
  4. Mengapa data-data yag saya inputkan/kirimkan melalui form tidak bisa disimpan/ditampilkan hasilnya?
  5. Mengapa aplikasi upload file yang saya buat berdasarkan petunjuk di buku tidak jalan, padahal sudah sama persis?
  6. Saya dulu bikin aplikasi menggunakan PHPTriad, tapi setelah berpindah ke Xampp tidak bisa jalan?
  7. Mengapa aplikasi yang say buat menggunakan Mambo (termasuk juga joomla, PHPNuke, Postnuke, PHPBB) tiba-tiba tidak bisa jalan di Internet, padahal sebelumnya bisa jalan?

Register Global ON VS OFF

Pada awal perkembangannya, secara default register globals di set On dengan tujuan untuk memberi kemudahan pengguna dalam mempelajari PHP, sehingga pengguna dapat mengambil/memanggil variabel cukup dengan menyebutkan nama variabelnya, tidak peduli apakah variabel tersebut berasal dari GET,POST,COOKIE, atau SESSION. Contohnya, perhatikan skrip berikut:

    <?

    /* on_global.php*/

    echo “<form method=GET action=on_global.php>

    Isikan Nama Anda : <input type=text name=’nama’>

    <input type=submit name=oke value=kirim></form>”;

    if($oke==’Kirim’) {

    echo “Nama Anda adalah: <b>$nama</b>”;

    }

    ?>

Sekarang jalankan file on_global.php, lalu isikan nama, lalu tekan tombol proses, maka script tersebut dapat berjalan dengan normal.

Namun sejak versi 4.3 X ke atas, maka default nilai register globals = off, sehingga apabila file on_global.php dijalannkan, maka tidak akan menghasilkan apa-apa.

Sehingga agar skripnya dapat berjalan pada register globals = off, maka perlu disesuaikan variabelnya menjadi seperti berikut:

    <?php

    /* off_global.php*/

    echo “<form metod=’GET’ action=off_global.php>

    Isikan Nama Anda : <input type=text name=nama>

    <input type=submit name=oke value=Kirim></form>”;

    if($_GET[oke]==’Kirim’) {

    echo “Nama Anda adalah : <b>$_GET[nama]</b>”;

    }

    ?>

Yang saya cetak tebal adalah perbedaan koding pada kondisi Register Global ON dan OFF.

Beberapa Penyesuaian Yang Harus Dilakukan Jika Register Global OFF

Dampak Pengaruh Register Globals

Sebagai penutup, tentu kita ingin mengetahui apa sebenarnya pengaruh dari register globals yang di set On terhadap aplikasi yang kita buat?

  1. Karena tidak memperdulikan sumber dari variabelnya sama, misalnya kita telah memberi nama variabel $username mengunakan GET, kemudian ternyata $username juga digunakan oleh SESSION, maka tentunya PHP harus memilih salah satu saja, dimana variabel yang lain tidak berfungsi atau dianggap sama.
  2. Alasan rentannya keamanan yang cukup tinggi apabila register globals di set On, terutama jika skripnya diketahui banyak orang. Untuk lebih jelasnya, ketiklah dua buah skrip sederhana yang dibuat berdasarkan register globals = On seperti berikut:

<?php

/* efekglobal.php*/

echo “<form method=POST action=aksiglobal.php>”

.”Username : <input type=text name=username><br>”

.”Password : <input type=password name=password><br>”

.”<input type=submit value = login></form>”;

?>

<?php

/* aksiglobaloff.php*/

if($usrname==’admin’ and $password==’rahasia’) {

$admin=true;

}

//apabila username dan password benar

if($admin) {

echo “Selamat Datang di halaman Admin”;

}

else {

echo “Login Gagal, Silahkan ulang lagi”;

}

?>

Sekarang coba jalankan skrip efekglobal.php, lalu isikan username dan password yang salah, lalu tekan tombol Login, maka akan di proses oleh aksiglobal.php yang hasilnya menampilkan pesan ‘Login Gagal, Silahkan ulangi lagi’, namun kaena register globalnya di set On, maka coba ketikkan di baian Address:http://localhost/aksiglobal.php?admin=1, maka anda akan berhasil masuk sebagai admin tanpa memasukkan Username dan password.

sekarang coba ubah register globalsnya menjadi Off dan sesuaikan skripnya menjadi seperti berikut

<?php

/* aksiglobaloff.php*/

if($_POST[username]==’admin’ and $_POST[password]==’rahasia’) {

$admin=true;

}

//apabila username & password benar

if($admin) {

echo “Selamat Datang di halaman Admin”;

}

else {

echo “Login Gagal, Silahkan Ulangi Lagi”;

}

?>

Coba sekarang ketikan lagi: http://localhost/aksiglobaloff.php?admin=1 di bagian address browser, maka anda tetap dianggap user yang tidak sah (Login gagal).
Uji coba yang telah kita lakukan hanyalah contoh sederhana dari terbukanya lubang keamanan yang cukup rawan pada aplikasi PHP yang kita buat. Contoh lainnya yang cukup mencemaskan, misalnya user yang jahil dapat meamsukkan file-file atau data-data yang dapat mengacaukan aplikasi atau membuat aplikasi hang atau bahkan lebih ekstrim melakukan penghapusan data.

Sumber Tulisan : http://www.aefil.com/artikel_lengkap.php?id=19

Iklan

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google+

You are commenting using your Google+ account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

w

Connecting to %s