Tentang Register Global, membuat aplikasi PHP yang aman

Kontroversi yang paling menarik pada PHP adalahdalam penggunaan register global. Apakah akan di set ON atau OFF. Kaliini kita akan melihat contoh kesalahan script yang dapat ditembusapabila Register Global di set ON.

Ketika ON, maka register_globals akan memasukkan variabel ke scriptyang telah dibuat (seperti pada permintaan melalui form html). Hal inisesuai dengan fakta bahawa PHP tidak membutuhkan inisialisasi darivariable, dan itu berarti akan sangat mudah bagi kita untuk menuliskoding yang tidak terjamin keamanannya. komunitas PHP memutuskan untukmengeset nilai default register global menjadi OFF. Terkadang, jika diset on, maka orang2 akan terbiasa menggunakan variabel2 yang bahkanmereka sendiri tidak tahu darimana variabel tersebut datang.

Kita akan lihat salah satu contoh dari kesalahan scripting ketika status register global di set ON.

PLAIN TEXT

PHP:

  1. <?php

  2. // define $otorisasi = true jika otentifikasi dari user telah valid

  3. if (authenticated_user()) {

  4. $otorisasi = true;

  5. }

/* Karena pada sebelumnya kita tidak menginisialisasikan $otorisasi= false, maka otorisasi tersebut akan dilakukan melalui register global

misalnya dari GET auth.php?otorisasi=1

maka semua orang akan dianggap telah memiliki ototentifikasi yang valid (1 = true) */if ($otorisasi) {

include "admin/data.php";

}

?>

Jika register global = OFF, maka $otorisasi tidak akan dapat di set melalui request, dan script tersebut pun akan aman2 saja.

Contoh lain adalah pada penggunaan session. Register global = ON,maka kita dapat menggunakan variabel $username (contohnya) sebagaidasar dalam memulai session. tapi sekali lagi, apakah kita dapatmengetahui darimana nilai dari variabel tersebut dikirimkan?

Contoh session, tanpa memperdulikan status register global (ON atau OFF).

PLAIN TEXT

PHP:

  1. <?php

  2. if (isset($_SESSION['username'])) {

  3. echo "hallo {$_SESSION['username']";

  4. } else {

  5. echo "Halo, anda belum login. silahkan login terlebih dahulu";

  6. }

  7. ?>

Anda dapat menggunakan script berikut untuk mengetahui status register globals pada website anda:

PLAIN TEXT

PHP:

  1. <?php

  2. $reglob = ini_get('register_globals');

  3. if($reglob == 1){

  4. echo "register_globals ON";

  5. } else {

  6. echo "register_globals OFF";

  7. }

  8. ?>

Jika register_globals di set ON, maka akan muncul tulisan "register_globals ON", dan sebaliknya.

Anda dapat mengubah nilai register_globals pada account Anda dengan menambahkan baris berikut pada file .htaccess.

PLAIN TEXT

CODE:

  1. php_flag register_globals on