MODUL 1
43 Things Tags: SCRIPT DAN SCRIPTING
Common Gateway Interface (CGI) merupakan salah satu protokol gateway yang pertama diciptakan, dan tersukses, untuk menghubungkan web server dan aplikasi. CGI adalah aplikasi eksternal standard yang menghubungkannya dengan informasi server, seperti HTTP atau web server.
1.1 Cara Kerja CGI
Gambar 1.1 memperlihatkan cara kerja CGI kurang-lebih sebagai berikut:
a. Aplikasi CGI, yang berupa file skrip (script file), ditaruh di lokasi direktori yang dapat diakses oleh web server,
b. Jika ada permintaan terhadap aplikasi dari klien, web server akan membaca skrip dan menjalankan program,
c. Web server memberi program ini masukan (termasuk masukan yang diberikan klien) dari masukan standar (stdin) serta beberapa environment variable,
d. Web server menunggu program berjalan hingga selesai lalu menangkap keluaran standar program (stdout), keluaran inilah yang diberikan kepada klien.
1.2 Kelebihan CGI
Kelebihan yang dimiliki CGI antara lain:
a. Skrip CGI dapat ditulis dalam bahasa apa saja, namun barangkali sekitar 90% program CGI yang ada ditulis dalam Perl,
b. Protokol CGI yang sederhana,
c. Kefasihan Perl dalam mengolah teks, menjadikan menulis sebuah program CGI cukup mudah dan cepat,
d. Meski tertua, hingga saat ini menurut survei dari Netcraft sekitar 70% aplikasi di web masih menggunakan CGI. Ini berarti, lebih dari separuh situs web dinamik yang ada dibangun dengan CGI.
1.3 Kelemahan CGI
Salah satu kelemahannya ialah kecepatan yang rendah. Untuk menghasilkan keluaran program CGI, overhead yang harus ditempuh cukup besar.
Dalam kasus CGI Perl, prosesnya sbb:
1. Web server terlebih dahulu akan menciptakan sebuah proses baru dan menjalankan interpreter Perl.
2. Perl kemudian mengkompilasi script CGI tersebut, baru kemudian menjalankan skrip.
Keseluruhan siklus ini terjadi untuk setiap request. Dengan kata lain, terlalu banyak waktu dibuang untuk menciptakan proses dan tidak ada cache skrip yang telah dikompilasi.
Namun demikian, mungkin ini tidak lagi menjadi kendala di saat teknolgi hardware untuk server sudah sedemikian maju; kecepatan prosesor saat ini sudah cukup tinggi. Jika situs web Anda menerima kurang dari sepuluh hingga dua puluh ribu hit CGI per hari, rata-rata mesin web server Unix yang ada sekarang ini mampu menanganinya dengan baik.
1.4 Script dan Scripting
Skrip (script) adalah semacam bahasa pemrograman dalam tingkat kesulitan yang lebih rendah, tanpa aplikasi hasil kompilasi interpreter; skrip biasanya disisipkan ke dalam bahasa pemrograman yang lebih kompleks dan hasil skrip digunakan oleh bahasa pemrograman yang lebih kompleks itu. Contohnya ialah penyisipan skrip assembly ke dalam program Pascal untuk mengakses hardware pada level bahasa tingkat rendah. Skrip merupakan kumpulan sintaks bahasa pemrograman yang siap untuk di-compile.
Scripting adalah semacam metoda untuk menulis skrip pada text editor agar dapat diterjemahkan oleh browser. Pada praktiknya, scripting merupakan teknik membuat skrip sehingga skrip yang kita buat menjadi lebih efisien dan tak memakan banyak memori ketika di-compile/dijalankan.
Perbedaan mendasar antara skrip dengan bahasa pemrograman:
a. Pada dasarnya, skrip lebih sederhana daripada bahasa pemrograman. Namun pada perkembangannya, bahasa scripting pun sekarang sudah cukup ”komplit”.
b. Untuk menerjemahkan skrip (me-run) tidak perlu suatu kompiler khusus yang komplit, sedangkan bahasa pemrograman membutuhkan suatu kompiler khusus untuk me-run program tersebut. Kompiler sebuh skrip biasanya hanyalah modul (semacam plug-in) pada sisi pemroses skrip; dalah hal ini aplikasi server web seperti Apache.
c. Dala kasus halaman web, skrip diakses melalui browser di internet, sedangkan bahasa pemrograman diakses dengan membuka file/program aplikasinya.
Dilihat dari prosesor mana yang mengeksekusi skrip, penulisan skrip pada dasarnya dibagi menjadi dua, yakni client-side scripting dan server side scripting.
1.5 Client-Side Scripting
Client-side scripting melibatkan blok skrip tambahan untuk ditambahkan di file HTML. Dalam hal ini server web tidak akan memperlakukan skrip lain dari tag-tag lain yang sudah ada di halaman HTML, sebaliknya browser-lah yang akan menerjemahkan mereka pada komputer user. Karena itu, scripting jenis ini disebut client-side, yang bekerja di komputer user, bukan di server.
Kelebihan client-side scripting:
a. Tidak diperlukan server khusus untuk menjalankan skrip.
b. Tidak membebani kerja server web, terutama di server web dengan traffic tinggi.
Kekurangan client-side scripting:
a. Harus didukung oleh browser pihak klien (walaupun secara umum hampir bisa dibilang semua browser mendukung bahasa-bahasa skrip seperti JavaScript atau VBScript,
b. Kode skrip menjadi terlihat oleh user (visible) dan dapat ditiru. Namun demikian, di era open source seperti sekarang ini kebanyakan skrip memang hasil cut & paste,
Contoh bahasa client-side script:
1. JavaScript
JavaScript secara umum didukung oleh dua browser populer, yakni Microsoft Internet Explorer dan Netscape Navigator, hanya saja mereka mendukung dengan caranya masing-masing, tetapi kebanyakan script JavaScript dapat berjalan di kedua browser ini. Demikian pula pada browser lain seperti Opera atau FireFox. Pada tahun 1997 terbentuk The European Computer Manufacturers Association sebagai penyedia standar untuk JavaScript. Netscape baru-baru ini mengumumkan keluarnya JavaScript versi 1.3.
2. VBScript
Kebanyakan VBScript hanya didukung oleh Microsoft Internet Explorer. Tersedia plug-in untuk memungkinkan klien menggunakan VBScript di Netscape Navigator, tapi plug-in ini tidak gratis.
1.6 Server-Side Scripting
Server-side scripting mengunakan skrip yang dijalankan di server web, hasilnya saja yang dikirim ke browser pada sisi klien.
Kelebihan server-side scripting:
a. Karena skrip berjalan di server, Anda tahu pasti apa yang dapat Anda lakukan dengan script tersebut dan software apa yang tersedia,
b. Jika skrip Anda menghasilkan output dalam bentuk HTML yang baku, hampir semua browser akan dapat melihatnya.
Kekurangan server-side scripting:
a. menambah beban kerja Server,
b. Anda harus punya akses/permission khusus untuk menggunakan server-side scripting
Beberapa contoh server-side script antara lain:
1. CGI
CGI ini boleh dibilang teknologi klasik (tertua di Web), untuk melakukan fungsi-fungsi server-side. Kebanyakan program CGI menggunakan Perl, bahasa scripting yang cocok untuk scripting di Web. Walaupun sebenarnya anda dapat menulis program CGI hampir dengan semua bahasa, termasuk C++, Python, dan Java. Tapi, tanpa perencanaan yang hati-hati, CGI dapat membuka lubang keamanan (security hole) di server Anda, dan biasanya program CGI susah di-debug, dan susah dipelajari dan dipraktekkan terutama bagi web designer yang bekerja di platform non-*NIX.
2. Server-Side Java, JavaScript, dan VBScript
Microsoft IIS server dapat menerjemahkan Java, JavaScript, dan VBScript di server (juga untuk PerlScript). Sever Netscape juga mendukung Java dan Javascript untuk dijalankan di Server.
3. ASP
Andalan Microsoft untuk teknologi Scripting Web, terutama didukung oleh Microsoft IIS Server. ASP ini sebenarnya VBScript yang berjalan di sisi server.
4. PHP
Bahasa scripting yang baru-barui ini menjadi populer. PHP kadang dikelompokkan dengan sistem operasi Linux dan Web Server Apache, karena sifatnya yang open source dan gratis.
5. Cold-Fusion
Dikeluarkan oleh Allaire, Cold-Fusion mulai meningkat kepopulerannya terutama dengan kemampuan pengembangan di lingkungan development Visual (ColdFusion Studio) yang ditawarkan.
6. Miva
Dulu dikenal dengan HTMLScript, mirip dengan PHP, tapi ditawarkan secara komersial.
7. Servlets
Servlets sedang meningkat popularitasnya untuk menulis Java Objects yang meningkatkan fungsi server. Sifat Java yang berorientasi obyek (object oriented) membuat pemrogram mudah menuliskan Servlets. Untuk beberapa kalangan, Java Servlets dianggap lebih effisien daripada CGI.
8. ISAPI, NSAPI, and Native Server APIs
Semua yang ”berbau” API (Application Programming Interface) ini kebanyakan hanya untuk pemrogram hard-core.
1.7 Keamanan Scripting
Ada hal yang cukup penting untuk dibahas bila kita melakukan scripting, yakni tentu saja keamanan dari scripting itu sendiri. Ada banyak serangan yang dapat dilakukan oleh para hacker untuk mengakali situs web yang kita buat, baik dengan client-side maupun server-side scripting. Salah satu contoh serangan yang cukup komprehensif ialah apa yang dinamakan cross side scripting (XSS).
1.7.1 Apa itu XSS
XSS atau cross-site scripting, merupakan sejenis serangan yang ditujukan ke pengguna lainnya. Serangan ini tidak akan memberikan akses root ataupun system dalam server web, serangan ini hanya berusaha mendapatkan informasi yang berkaitan dengan aplikasi web yang digunakan. Aplikasi web ini dapat berupa aplikasi email berbasiskan web, forum online atau situs e-shopping.
Sebagai contoh sederhana XSS, bayangkan sebuah buku tamu dimana orang-orang dapat berdiskusi tentang tanggapan mereka terhadap sebuah situs, ketika melihat buku tamu tersebut, kita dapat melihat apa yang pengguna sebelumnya komentari tentang situs tersebut, dan kadang kala situs tersebut mengijinkan penggunaan tag HTML, lalu kenapa tidak kita menulis komentar dengan menggunakan huruf ‘comic sans’ dan berwarna merah, sehingga tiap orang dapat melihat komentar kita tersebut. Karena HTML hanyalah sebuah bahasa program script dan browser kita merupakan interpreter untuk hal tersebut. Maka dengan sedikit kreativitas, komentar di buku tamu tadi, kita sisipkan beberapa scrip program rahasia, tentu pengguna lainnya tidak menyadarinya.
Dengan hadirnya teknologi yang memungkinkan situs web menjadi lebih interaktif dan dinamis, XSS juga mengalami perkembangan. Dengan menggunakan java script memang serangan XSS tidak dapat menghapus isi data di hard drive client, tapi kita mengakses url yang sedang diakses klien, melihat history akses web si klien ataupun melihat cookie yang ada. Hal kecil yang akan membawa dampak besar.
Memang XSS hadir karena jeleknya pembangunan sebuah situs web. Kita lebih terbiasa dengan keindahan desain dan isi dari situs web kita, tapi tidak cukup peduli dengan rangkaian baris program yang menyusun situs web tersebut, jarang sekali kita melakukan validasi atas broken link atau input yang diberikan oleh user, seperti pada buku tamu di atas - hal yang paling sering digunakan untuk menyisipkan kode curang sang penyerang.
Kesuksesan jenis serangan ini bergantung pada dukungan fungsionalitas di browser klien untuk menginterpretasikan script tersebut, kebanyakan browser web dapat menginterpretasikan embedded script dalam isi HTML.
1.7.2 Anatomi serangan XSS
Sebuah serangan cross site scripting dilakukan dengan menyediakan alamat khusus yang dikemas oleh penyerang untuk calon korbannya. Dalam konteks XSS, penyerang mengundang korbannya untuk mengeksekusi alamat URL yang diberikan dan membiarkan korban mengikuti link tersebut dengan menjalankan script yang sebelumnya beraksi di komputer klien untuk mendapatkan informasi yang diinginkannya.
Baiklah sekarang kita amati bagaimana sebenarnya sebuah serangan XSS berjalan, ada tiga hal yang berkait dan dapat disusun sebagai sebuah anatomi serangan XSS yaitu penemuan, serangan, dan eksploitasi.
1.7.3 Penemuan Titik Rawan Aplikasi
Serangan XSS berdampak pada ketidaksempurnaan aplikasi berbasis web dan bermuasal pada masukan pengguna (user) yang tidak begitu baik dibersihkan pada penggunaan karakter HTML. Hal ini dapat memungkinkan penyerang menyisipkan kode HTML tambahan dimana mereka dapat mengendalikan eksekusi pada halaman tersebut dibawah izin yang diberikan oleh situs itu sendiri. Sebuah contoh sederhana dari halaman yang dapat digunakan untuk cross site scripting seperti dibawah ini :
<?php echo "Hello, {$HTTP_GET_VARS[’name’]}!"; ?>
Sekali halaman tersebut dapat terakses, variabel tersebut dikirim melalui metode GET langsung menuju halaman yang dituju. Dimana masukan tidak ditandai sebagai variabel masukan, pengguna dapat memasukkan beberapa karakter yang diinterpretasikan sebagai perintah meta karakter, cukup mirip dengan injeksi SQL.
Dengan memasukkan HTML metacharacter memungkinkan keluaran yang tidak diinginkan: Dimana masukan tidak divalidasi terlebih dahulu sebelum keluaran dikirimkan ke browser klien. Hal di atas memberikan pengguna untuk mengendalikan HTML dengan menyisipkan script ke halaman tersebut.
Beberapa titik dimana biasanya XSS terjadi adalah pada halaman konfirmasi (seperti mesin pencari dimana memberikan keluaran dari masukan pengguna dalam aktvitas pencarian) dan halaman kesalahan (error page) yang membantu pengguna dengan mengisi bagian form untuk memperbaiki kesalahan.
1.7.4 Serangan
Sekali masukan rawan teridentifikasi pada metode HTTP - yang bergantung pada fasilitas protokol HTTP, maka aktivitas serangan dapat dilakukan baik dengan metode GET, POST dan metode lainnya.
Penyisipan dengn metode GET merupakan cara termudah tapi juga sering dijumpai. Karena pengguna cukup banyak mengerti akan adanya pengarahan ulang (redirection) atau adanya pemanggilan alamat lain yang tampak pada tabulasi alamat (address bar). Metode cukup dilihat pada URI dan biasanya tercatat di server HTTP. Contoh serangan dengan metode ini dapat dilihat seperti berikut:
v http://www.microsoft.com/education/?ID=MCTN&target=http://www.microsoft.com/education/?ID=MCTN&target="> <script>alert(document.cookie)</script>
v http://hotwired.lycos.com/webmonkey/00/18/index3a_page2.html?tw= <script>alert(‘Test’);</script>
v http://www.shopnbc.com/listing.asp?qu=<script>alert(document.cookie)</script>&frompage=4&page=1&ct=VVTV&mh=0&sh=0&RN=1
v http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/im_search_exe?search_text=%22 %3E%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E
Karena tabiat dari XSS, penyerang tidak dapat secara langsung memanfaatkan kerawanan untuk keuntungan sendiri. Korban mesti melihat kode yang disisipkan agar dapat dieksekusi. Dan begitu korban melihat kode tersebut, dan mengeksekusi, informasi tentang si korban dapat diketahui oleh si penyerang.
Dibanding serangan dengan metode GET, dengan metode POST sedikit lebih rumit, dimana variabel POST dikirim secara mandiri dari permintaan URI, sehingga butuh halaman transisi untuk memaksa korban mengeksekusi permintaan POST (POST request) yang berisi kode XSS.
Baru-baru ini metode serangan XSS telah menggunakan metode TRACE, serangan ini memanfatkan activeX, dimana informasi tentang user dikirimkan melalui TRACE request melalui browser klien, informasi ini juga dapat diubah ke dalam bentuk xml, sehingga klien dan situs web tersebut tidak menyadarinya. Metode ini mampu melewati keamanan HTTP Only.
Oleh : Raka yusuf, ST