Kamis, 25 November 2010

CGI dan PERL

Halaman web dinamis merupakan halaman web yang mampu menampilkan informasi secara berubah-ubah, tergantung dari input yang diberikan. Contohnya bila menggunakan search engine, maka halaman yang ditampilkan akan selalu berbeda tergantung dari keyword yang kita masukkan. Di sinilah bentuk dari interaksi antara user (browser) dengan server. Perbedaan dengan situs statis adalah, pada situs web yang statis kita hanya dapat meminta server untuk menampilkan halaman tertentu dan kemudian server mengirim informasi tersebut kepada kita melalui browser.

Untuk membuat situs yang interaktif/dinamis tidak cukup hanya mengandalkan HTML saja. Mesti didukung dengan bahasa pemrograman lain yang lebih "kuat". Dalam hal ini kita dapat membedakan menjadi dua jenis pemrograman, yaitu server side dan client side. Penggunaan server side atau client side tergantung dari aplikasi yang akan kita buat. Keduanya bukanlah saling bersaing, tapi melengkapi antara satu dengan yang lainnya.

CGI (Common Gateway Interface) merupakan suatu bentuk hubungan interaktif di mana client (browser) dapat mengirimkan suatu masukan kepada server, dan server mengolah masukan tersebut serta mengembalikannya kepada client (browser). Contoh sederhana adalah saat Anda menggunakan suatu search engine. Saat Anda menuliskan keyword dan menekan tombol Search maka browser akan mengirimkan keyword tersebut ke server. Keyword tersebut lalu diolah oleh server dan server mengirimkan data hasil pengolahan (yang sesuai dengan keyword yang kita masukkan) ke browser kita. Jadi yang kita lihat pada browser hanya data yang sesuai dengan keyword yang kita masukkan.
Program CGI ditulis dalam bahasa yang dapat dimengerti oleh sistem misalnya C/C++, Fortran, Perl, Tcl, Visual Basic, dan lain-lain. Pemilihan bahasa yang digunakan tergantung dari sistem yang digunakan. Jika kita menggunakan bahasa pemrograman seperti C atau Fortran maka program-program yang kita buat harus dikompile terlebih dahulu sebelum dijalankan sehingga pada server akan terdapat source code dan program hasil kompilasi. Berbeda bila kita menggunakan bahasa script seperti PERL, TCL, atau Unix Shell maka hanya akan terdapat script itu sendiri (tanpa ada source code). Banyak orang yang lebih suka memilih menggunakan script CGI dibandingkan dengan bahasa pemrograman karena lebih mudah untuk di-debug dan dimodifikasi. Dalam pembahasan kali ini kita akan menggunakan Perl sebagai bahasa script-nya.
Untuk dapat menulis Perl dan mengetes/menjalankannya, dibutuhkan beberapa syarat, yaitu :

- Perl for Windows, Ultra Edit, Perl Builder, dll.
 
Jika Anda ingin menulis Perl dengan menggunakan MS Windows 95/98/NT/2000/ME, maka software-software di atas mutlak diperlukan. Tapi Anda pun bisa menggunakan Notepad untuk menulis script Perl tersebut, kemudian menggunakan Ultra Edit untuk mengkonversi script dari platform Windows ke UNIX.
Perl adalah akronim dari Practical Extraction and Report Language, atau Pathologically Eclectic Rubbish Lister. Perl diciptakan dengan menggabungkan unsur-unsur dari bahasa C, awk, Bourne Shell script, dan program-program seperti sed, grep.
 
Tidak seperti shell script, Perl tidak bergantung pada program-program eksternal, sehingga lebih cepat. Perl adalah setengah kompiler dan setengah interpreter. Jika kita menjalankan sebuah skrip Perl, maka skrip tersebut sebenarnya dikompilasi terlebih dahulu ke dalam bentuk menengah (pohon syntax) yang kemudian diinterpretasikan oleh sistem run-time Perl. Dengan demikian, eksekusi skrip Perl lebih cepat daripada skrip bahasa-bahasa yang murni terinterpretasi (interpreted language) seperti Tcl. Lebih lanjut lagi juga muncul teknik-teknik untuk lebih mempercepat lagi waktu eksekusi skrip Perl.
 
Tidak seperti produk-produk proprietary seperti Java yang tidak pernah lepas dari isu-isu ``politik bisnis'', pengguna Perl bisa dengan tenang dan nyaman menggunakan Perl pada platform favoritnya. Seperti Linux, Perl dapat diperoleh secara bebas, karena berlisensi publik GNU.
 
Oleh para pakar bahasa pemrograman, Perl digolongkan ke dalam VHLL (Very High Level Language). Satu perintah dalam Perl ekivalen dengan banyak perintah dalam bahasa tingkat tinggi, sehingga program-program yang ditulis dalam Perl sangat efisien dan ringkas.
Perl merupakan pilihan utama untuk tugas-tugas pengolahan teks, terutama dengan fasilitas regular expression-nya yang sangat canggih. Dengan mewabahnya internet, dengan sejumlah protokolnya yang berbasis teks (NVT ASCII), Perl menjadi pilihan utama untuk pemrograman internet, terutama CGI (Common Gateway Interface).
 
Semula Perl hanya dipakai untuk menulis skrip-skrip pendek, namun dalam perkembangannya, Larry menambahkan dukungan bagi pemrograman berorientasi objek, dan dimulailah era baru pemrograman Perl untuk aplikasi-aplikasi besar dan rumit.




Dalam web development, sering kali kita menemui komunikasi satu atau dua file web untuk mendapatkan suatu hal yang kita inginkan. Yang saya sebut komunikasi satu atau dua file dalamweb ini biasanya terbentuk atas satu form dan satu lagi merupakan validasi atau sebuah fileyang menjadi form sekaligus menjadi validator. Misal: form untuk submission guest book, atauform untuk submission login suatu aplikasi web. Dalam pengembangannya komunikasi satu atau dua form ini kemudian menjadi semakin canggih dengan masuknya teknologi ajax (Asynchronous JavaScript and XML).
Kali ini kita hanya akan membahas teknik dasar komunikasi form dalam web development, dan kali ini kita juga akan menggunakan php sebagai referensi pembahasan komunikasi form. Kita tidak akan membahas ajax kali ini, mungkin lain waktu kita akan membahas ajax dalam kesempatan yang lain.
Pada dasarnya komunikasi form dalam web development menggunakan beberapa metode. Diantaranya adalah, MetodeGET, PUT, POST, DELETE, CONNECT, TRACE. Kali ini kita akan membahas dua metode yang sering dipakai dalam komunikasi form dalam web aplikasi, yaitu metode GET dan metode POST Kedua metode ini mempunyai keunggulan dan kekurangan masing-masing. Pemilihan antara dua metode ini bergantung pada kebutuhan kita nantinya dalam mengembangkan suatu aplikasi webGambar 1 :
METODE HTTP GET :
Secara praktikal metode ini mengambil paramater-parameter yang terlihat nyata pada urlketika satua atau dua buah form berinteraksi, untuk kemudian paramater-parameter tersebut menjadi suatu syarat untuk menjalankan suatu proses dalam form validasinya. Kita dapat menemui metode get ini dalam suatu web aplikasi ketika kita mendapati dalamurl seperti contoh berikut : http://www.mysite.com/login.php?uid=1234568Angka 1234568 itu adalah nilai dari paramater uid yang dilemparkan oleh form. Jadi bisa disimpulkan bahwa dalam suatu web aplikasi jika parameter dan nilainya dapat terlihat secara jelas dalam url maka komunikasi yang terjadi menggunakan metode http get.
Bagaimana cara php dalam mengimplementasikan metode http get ini ? Ok kita akan mencoba melakukan percobaan kecil dengan menggunakan dua buah file. File pertama sebagai form-nya dan file kedua sebagai validasinya. Perhatikanfile pertama dibawah ini sebagai formnya, file : form1.html 
kemudian perhatikan validator dari form keduanya validate.php,
Jika kita ingin menjalankan aplikasi kecil tersebut kita bisa menjalankan file form1.htm dan tampilannya akan menjadi seperti ini, Gambar 1:
jika kita isi masing-masing text box tersebut kemudian kita tekan tombol masuk maka terjadilah komunikasi dua form tersebut dan demikian hasil yang bisa kita dapat, Gambar 2:
Ok sekarang kita bahas saja aplikasi kecil ini :
Pada form1.html kita dapat melihat pada baris <form method=”get” action=”validate.php”> pada baris ini kita bisa melihat bahwa form yang kita gunakan menggunakan metode get dan form tujuan atau form validatornya adalah validate.php. Yang harus kita pahami adalah jika kita ingin menggunakan metode http get pada web aplikasi kita, maka form yang kita definisikan menggunakan metode get seperti diatas. Sementara tampilan pada web aplikasi kita adalah standar html biasa dengan dua input, dimana yang satu merupakan berupa text dan satu lagi berupa password, dan sebuah tombol sebagai sebuah trigger komunikasi dua form tsb.
Kemudian kita akan melihat bagaimana php menangani metode get ini dalam programmingnya pada barisan kode pada file validate.php. Sebelumnya coba kita perhatikan gambar 2, pada url yang ada pada gambar tersebut terdapat tulisan seperti ini : ……/validate.php?user=mojo&pass=mojo99, begitulah cara kerja metode http getsemua paramater dan nilai parameter tersebut ditampilkan dalam url sehingga kita bisa melihat secara jelas parameter dan nilai dari parameter tsb, sesuatu menyembul dalam benak anda ? Ok nanti kita bahas sesuatu yang menyembul tsb.
Sekarang perhatikan cara php menangani komunikasi 2 file tsb, masing-masing nilai parameter diinisialisasikan kepada sebuah variabel dengan cara seperi ini:
  $user = $_GET["user"];
$pass = $_GET["pass"];
lalu kemudian mencetak 2 variabel yang sudah terisi nilainya tersbut ke dalam layar dengan cara seperti ini :
   echo “$user………
dimana $user adalah variabel untuk diisi nilai yang ditangkap dengan cara $_GET[“user”] dan $pass yang ditangkap dengan cara $_GET[“pass”]. User dan pass yang ada dalam tanda kurung [] adalah parameter yang dilempar dariform1.html. Jadi demikianlah cara php menangani komunikasi form yang menggunakan metode http get.
Selaras dengan sesuatu yang tadi mungkin menyembul dalam benak anda, kita perhatikan bahwa berbahaya sekali metode http get ini jika kita terapkan dalam web aplikasi kita, user akan dengan gampang melihat nilai-nilai dan parameter-parameter yang terlempar dari komunikasi form dalam web aplikasi kita. Hal inilah yang dapat menyebabkan seseorang mengeksploitasi suatu web dengan cara menginjeksi url yang ada.
Banyak developer web aplikasi masih tetap menggunakan metode http get ini, dan usaha dari mereka untuk menjaga keamanan web yang mereka buat ini adalah dengan cara meng-enkripsi url yang tampil, baik parameter maupun nilai dari parameter yang ada. Keamanan ini biasanya dibuat berlapis-lapis dengan menggunakan metode enkripsi string dari mulai sha, base64, md5, dan metode-metode enkripsi yang lain, atau mungkin metode enkripsi yang mereka buat sendiri.
METODE HTTP POST:
Sekarang kita akan melangkah pada metode http selanjutnya yaitu metode http post, untuk mendapatkan gambaran tentang metode yang satu ini langusng saja kita lihat dua form diatas yang kita modifikasi sedikit. sehingga menjadi seperti ini:
dan ini adalah validate2.php yang juga kita rubah sedikit dari file validate.php di atas: file : validate2.php

kemudian kita jalankan aplikasi tsb dengan cara membuka form2.html, setelah kita masukkan text-text yang tersedia, kemudian kita klik tombol masuk maka akan kita dapati hasil seperti gambar berikut, gambar 3:
adakah perbedaan antara gambar 2 dan gambar 3 disana? Yup, benar ada perbedaan yang terjadi pada dua gambar tersebut, pada gambar 3 kita tidak melihat ada paramater-paramater dan nilai-nilainya tercetak disana, namun hasil cetakan pada body halaman web tetap sama. Demikianlah metode http post, metode ini tidak akan mencetak paramater-parameter dan nilai dari paramater tersebut dalam url, sehingga beberapa developer merasa bahwa metode ini lebih aman dari pada metode http get.
Dari sisi kode, pada form2.html perbedaan terjadi hanya pada baris <form method=”post” action=”validate2.php”> ini saja, untuk membuat sebuah form dimana kita akan memakai metode http post, intinya kita hanya mengganti nilai darimethod menjadi post saja. Sementara dalam form validatornya dalam hal ini validate2.php kita cukup merubah $_GETmenjadi $_POST saja, sebab memang beginilah cara php menangani komunikasi form yang menggunakan metode http post.
Sekarang tinggal anda menyimpulkan sendiri lebih aman mana ketika kita menggunakan metode http dalam membuat komunikasi form dalam sebuah web aplikasi. Dari sana anda juga yang akan dapat menarik kesimpulan apa keuntungan dan kerugian jika kita menggunakan salah satu metode http tersebut dalam web aplikasi kita. Sepanjang semua jawaban dapat anda pertanggungjawabkan secara benar dan masuk akal, maka anda akan selalu benar dalam argumentasi anda.

Tidak ada komentar:

Posting Komentar