Main Contents

Request, Register Global [PHP]

2 January 2008

Pernah waktu kuliah sempat terpikir kenapa sih setiap program yang kubuat dengan PHP fungsi register global-nya mesti di On kan, sedangkan beberapa CMS pada proses installasi menyarankan untuk menonaktifkan fungsi ini (Off) dengan alasan faktor keamanan. Dan setelah beberapa kali bertemu dengan kasus yang sama, saya mulai mempelajari (mencoba) apa pengaruhnya pada program yang kubuat dan bagaimana mengubah kebiasaanku untuk menonaktifkan fungsi itu.

Dalam pemrograman web ada istilah Request yang terdiri dari Post, Get, Session, Cookies, Server. Fungsinya juga beragam, seperti post dan get yang sekali pakai (kecuali get, yang bisa diambil lagi lewat URL) , session dan cookies yang bisa berulang-ulang dipakai selama isinya belum diubah atau dihapus, dan server yang berisi variabel statis environment. Saya mungkin tidak terlalu menjelaskan secara detail (karena gak tau juga) tetapi hanya menjelaskan secara prakteknya saja.

POST

Biasanya dipakai untuk pengisian form (input atau tombol) dimana pada saat data dikirimkan ke server, user tidak dapat melihat langsung value yang dikirimkan pada URL dan hanya sekali pakai. Form Login ke suatu aplikasi web biasanya memakai tipe request ini. Untuk yang mengerti tentang HTML, biasanya tahu perbedaan pada tag <form> dimana settingan method-nya bisa menggunakan Post atau Get (bisa dilihat pada source kode HTML halaman web). Di PHP cara mengambil nilai request tipe ini bisa dengan:

$_POST['nama_data'] atau yang long array => $HTTP_POST_VARS['nama_data']

GET

Request ini mungkin yang paling familiar atau paling gampang diketahui karena bisa langsung diketahui pada address bar (URL) web site yang dikunjungi, Contohnya:

http://www.apalah.com/user.php?id=1234567

Maksud dari link URL di atas kira² seperti ini: pada halaman user.php membutuhkan suatu id untuk mengarah pada user tertentu, dimana id tersebut bersifat unique (tidak sama) untuk setiap user. Kadang juga ada link yang cukup panjang misalnya:

http://www.apalah.com/messages.php?uid=1234567&mid=3

Maksudnya: melihat pesan dari user dengan id=1234567 dengan id pesan (unique juga) = 3. Cara mengambil nilai dari request ini dengan PHP yaitu:

$_GET['uid'] atau yang long array nya => $HTTP_GET_VARS['uid']

Jadi intinya untuk GET, nilai yang diambil bisa terlihat langsung di URL walaupun pada beberapa kasus, nilai ini bisa juga disamarkan dengan menggunakan hashing (enkripsi). Bisa dengan md5, sha1, base64 dan lain sebagainya (banyak tipe enkripsi yang dipakai dengan tingkat kerumitan yang berbeda).

SESSION

Session dapat saya anggap sebagai tempat penyimpanan sementara (media pengingat), dan bisa dipakai berulang kali selama session tidak mati dan nilai session belum diubah atau dihapus. Biasanya session ataupun cookies dipakai pada aplikasi web yang membutuhkan privasi dengan membatasi hak user yang mengunjungi web dengan cara memberikan userid dan password untuk setiap user, walaupun fungsi session sendiri tidak hanya sebatas itu. Nilai dari session yang sudah didaftarkan akan disimpan pada server pada masa tertentu (bisa diatur). Cara menggunakan session yaitu:

session_start(); << fungsi untuk menjalankan fungsi session (wajib)

session_register($data); << untuk menyimpan data atau bisa juga dengan $_SESSION['index_data'] = $data;

$_SESSION['index_data']; << untuk mengambil nilai data

session_destroy(); << untuk menghapus semua nilai session, atau bisa juga dengan: unset($_SESSION);

COOKIES

Namanya juga kue, pasti enak.. :ngemil: , ini nggak ada hubungannya ama kue.. hihi.. cookies ini mirip dengan session bedanya kalau cookies data dipercayakan ke user dan disimpan pada komputer user. Gunanya untuk mempermudah agar user tidak perlu login berkali-kali untuk mengakses suatu web selama file cookies masih ada dan masih valid (not expired). Contohnya pada friendster, jika anda tidak mengklik link logout, maka cookies akan tersimpan terus di komputer anda dan ketika ada orang lain yang membuka friendster lagi maka yang tampil adalah halaman friendster milik anda yang belum dilogout (ini sebenarnya mempermudah atau malah membahayakan sih? .. mbuh lah.. ). Karena saya udah illfeel duluan sama cookies maka saya tidak pernah belajar menggunakan cookies.. hihi.. alesan tok ini mah.. cuma karena udah terbiasa pakai session, maybe next time.. :P

SERVER

Fungsi untuk mengambil variabel statis yang ada pada server.. just that. Cara mengambilnya yaitu:

$_SERVER['indec_data'] atau yang long array => $HTTP_SERVER_VARS['index_data']

Yup, yang terakhir yaitu spesial trik dari saya.. :ganteng: ,yaitu gimana biar register global kita tidak perlu diaktifkan dan semua request dapat ditambahkan filter untuk membatasi inputan dari mallicious code (ribet ngomongnya) atau script injection. Spesial karena pakai OOP (gaya thok.. :hihi: ) , jadi yang masih pakai PHP 4 ke bawah, ke laut aje.. :)) (padahal tempat hostingku masih pakai PHP 4 :hihi: ).

class.request.php

#********************************************
#filename: class.request.php
#desc: untuk menangani metode request get dan post
#********************************************
 
//begin
class darkRequest{
public function getRedirect($location){
return header("Location: ".$location);
}
public function getSelf(){
return $_SERVER["REQUEST_URI"];
}
public function getValue($var){
global $_POST,$_GET;
if(isset($_POST[$var])){
return $_POST[$var];
}elseif(isset($_GET[$var])){
return $_GET[$var];
}
}
public function getRequest($method="all"){
global $_REQUEST,$_POST,$_GET;
switch($method){
case "post":
return array_keys($_POST);
break;
case "get":
return array_keys($_GET);
break;
default:
return array_keys($_REQUEST);
break;
}
}
public function getIP(){
global $_SERVER;
$ip = $_SERVER['REMOTE_ADDR'];
return $ip;
}
public function getHost(){
global $_SERVER;
$ip = gethostbyaddr($_SERVER['REMOTE_ADDR']);
return $ip;
}
}
 
//end
?>

Ada beberapa fungsi yang tidak saya jelaskan diatas tapi biasanya sering dipakai juga. Seperti getRedirect, getSelf, getHost, getIP tapi rasanya gampang dimengerti maksudnya. Kalo ada yang mau nanya, silahkan aja ya.. :)

Detail: belajar |

27 Komentar to “Request, Register Global [PHP]”

  1. acha
    1

    sepertinya belum menjawab pertanyaan awal, Pul. mengapa register global musti on atau off.

    atau perntanyaannya lebih tepat, buat apaan sih register global.

    Balas Komentar Ini
  2. dark_ipl
    2
    Komentar Penulis

    @acha
    nah itu dia cha.. xixiixi.. saya lupa? (sengaja biar ada yg nanya :P )
    Jadi gini, sebenarnya alasan keamanan itu juga tidak mutlak jika programmernya lebih teliti menyaring (filtering) semua inputan, baik dengan method Post maupun Get.
    Cuma kadang sang programmer juga lupa, entah pada suatu bagian programnya ada yang belum difilter.
    Terus apa hubungannya dengan register global?
    Register global sendiri fungsinya untuk mendefinisikan semua variabel lebih dulu tanpa memperdulikan asal inputan.
    Lebih jelasnya gini, kalo register global dalam keadaan On, maka sistem menganggap variabel dengan nama $tes sama aja dengan $_POST['test'], atau $_GET['test'].. bisa dibayangkan gimana dampak dari ketidakjelasan asal inputan itu kan? :D
    Jadi register global sebenarnya mempermudah programmer yang tidak mau ambil pusing.. :P

    *mudah-mudahan mudah dimengerti.. :)

    Balas Komentar Ini
  3. mon
    3

    hyah..bosomu..gak mudheng… :(

    Balas Komentar Ini
  4. dark_ipl
    4
    Komentar Penulis

    @mon
    wakakakkk… maap
    jadi gini (style ngejelasin pakek caramu aja)
    register_global = On
    $tes = $_GET['tes'] = $_POST['tes'] (semua sama)

    register_global = Off

    $tes != $_GET['tes'] != $_POST['tes'] (tiap variabel beda)

    jadi, jika dalam source ada variabel $tes dengan isi yg udah ditentukan bisa diubah lagi dengan mengirim pada url ?tes=

    Balas Komentar Ini
  5. asri
    5

    kak ipul keren…..
    xp
    /me nda mudeng bacanyah
    bacaan tingkat tinggi
    xp

    Balas Komentar Ini
  6. dark_ipl
    6
    Komentar Penulis

    @asri
    kalo kamu gak ngerti brarti saya masih bodoh ngejelasinnya.. hiks..

    emang nda bakat ngajar kek nya.. :(

    Balas Komentar Ini
  7. didi80
    7

    he he he .. jadi malu, belom “ijin” dah “ketaoan” dulu. btw, soalnya hasil “survey” pake mesinnya Om Google, tulisan ini yang cukup mengena buat ‘jelasin makhluk yang namanya “register global” itu ;)
    thanks, mas keep writting!!

    Balas Komentar Ini
  8. dark_ipl
    8
    Komentar Penulis

    @didi80
    heheh.. gak apa² mas, toh saya juga senang ada yang ngasih link balik ke blog saya.. :)

    Balas Komentar Ini
  9. aris
    9

    :d:d he..he.. artikelnya menarik juga and prinsipnya sih sama ama saya, :-? tapi ngomong2 saya juga belum tau banyak php, mas, tolong ajarin ilmu php yang banyak yaaa…. trim’s:)>-

    Balas Komentar Ini
  10. dark_ipl
    10
    Komentar Penulis

    @aris
    saya juga masih belajar.. :)

    tapi kalo mau sharing boleh aja (via email atau YM aja)

    aneh juga, artikel ku yang ini paling banyak peminatnya.. :D

    Balas Komentar Ini
  11. CorBA™
    11

    terimakasih atas infonya..
    baru tahu saia gunannya register global.

    kak ipul
    terus gimana caranya klo kita udah terbisa pake
    $tes di web kita dibanding $_GET[’tes’] klo tempat hosting kita setingan register_global = “ON”.

    berarti mesti rubah syntax dong.
    mohon bimbingannya

    Balas Komentar Ini
  12. dark_ipl
    12
    Komentar Penulis

    @CorBA™

    gampang.. Ctrl+R (replace) … ;))

    becanda dink.. :D

    kalo struktur webmu bagus bisa tambahin aja di file kongifurasi skrip ini

    ini_set(”register_globals”,”Off”);

    Balas Komentar Ini
  13. ARS
    13

    wueleh… kenapa contohnya ga pake alamat apadong.com? :D

    Balas Komentar Ini
  14. dark_ipl
    14
    Komentar Penulis

    @ARS
    apalah.com itu lebih dulu ada daripada apadong.com .. ;))

    Balas Komentar Ini
  15. prouthon
    15

    bagus mas tulisannya, truz apa cuman pembedaan variable aja yang mempengaruhin register global??
    maap newbie :ampun::ampun:

    Balas Komentar Ini
  16. dark_ipl
    16
    Komentar Penulis

    pembedaan variabel?
    hmmm.. bukan register globalnya yang dipengaruhi, tapi register global yang mempengaruhi yang memaksa untuk lebih teliti dalam mendeklarasikan variabel.. ;)

    Balas Komentar Ini
  17. asri
    17

    @asri
    kalo kamu gak ngerti brarti saya masih bodoh ngejelasinnya.. hiks..
    emang nda bakat ngajar kek nya..

    haiah, bukan kakek yg nda bakat ngajar
    asr aja yg tlalu begok… :(
    yg kek gini aja ga ngerti
    *emg ini apa sih?
    :P

    Balas Komentar Ini
  18. dark_ipl
    18
    Komentar Penulis

    @asri
    semua orang pintar berawal dari orang tidak tahu (bodoh) ;)

    Balas Komentar Ini
  19. ardianz
    19

    heo., salam kenal sebelumnya., gw mau nanya nih., gw lagi pusing nih bro :((., gw bikin suatu project yang pada pengembangan awalnya register global gw = on., trus setelah jadi kan di pindahin ke server linux., naaahhh., di server itu register globalnya = off.., itu gi mana ya ngatasinnya., codingan gw jadi gak jalan., .., soalnya setiap variabel gw cuma pake $ doang., gak perbah pake $_get[] ataupun $_post[]., tolong pencerahannya., ada caranya gak ya biar codingan gw jadi jalan., tanpa merubah tipa variabelnya., thx sebelumnya.., regards ;;,

    Balas Komentar Ini
  20. dark_ipl
    20
    Komentar Penulis

    @ardianz
    yo. salam kenal juga

    kalo struktur webmu ada file confignya..
    tambahin ini aja..
    ini_set(”register_globals”,”On”);

    atau kalo tidak, pada awal tiap file yang kamu butuhin variabelnya aja tambahin code itu.. ;)

    Balas Komentar Ini
  21. ardianz
    21

    @ardianz
    yo. salam kenal juga
    kalo struktur webmu ada file confignya..
    tambahin ini aja..
    ini_set(”register_globals”,”On”);
    atau kalo tidak, pada awal tiap file yang kamu butuhin variabelnya aja tambahin code itu..

    oke thx., sebelumnya., kode itu kan mematikan setingan di php.ini nya ya? jadi on.,

    trus., gimana caranya., biar tetep off.., dan codingan gw yang ga pake method $_get[] / $_post[] itu tetep bisa jalan ??

    Balas Komentar Ini
  22. dark_ipl
    22
    Komentar Penulis

    @ardianz
    bukan gitu, cara itu gak ngerubah settingan di php.ini, tapi khusus buat codinganmu aja

    Balas Komentar Ini
  23. Anggie
    23

    Alo mas Syaiful.. Aku Anggie, lam knal yah. aku mau tny seputar register global masih aktif nggak c mas ni forum?

    Balas Komentar Ini
  24. dark_ipl
    24
    Komentar Penulis

    Alo juga..

    masih aktif koq.. walopun ini bukan forum tapi blog ku :D

    Balas Komentar Ini
  25. nj
    25

    makasih artikelnya ya…

    Balas Komentar Ini
  26. om_punk
    26

    mas, saya install apache2.2, PHP5 di WinXP Home Edition, punya masalah yg amat mendasar nih,..
    kalau buat Form dengan method POST, kok nggak bisa nge-pass variabelnya ya??

    misal :

    Please enter your name:
    I am…
    <?php print(”);
    ?>

    lalu di arahkan ke : page you_are.php

    <?php
    print(’Well, hello ‘ . $person . ‘, nice to meet you!’);
    print(”);
    print(’
    Back to Who Are You?
    ‘);
    ?>

    ———————–
    .$person. -nya nggak muncul sesuai isian..

    atas bantuannya TIA (thanks in advance)

    Balas Komentar Ini
  27. syaiful sabril
    27
    Komentar Penulis

    mungkin variabel globalnya lagi off

    coba ganti aja

    print(’Well, hello ‘ . $person . ‘, nice to meet you!’);

    dengan

    print(’Well, hello ‘ . $_POST[person] . ‘, nice to meet you!’);

    Balas Komentar Ini

Beri Komentar

:) :( :d :"> :(( \:d/ :x 8-| /:) :o :-? :-" :-w :doh: :yosh: :dance: semua »