Skip navigation

I’m moving to bertzzie.com. Please check there for my new post. Theme is still the same: computer science, philosophy, education.

Supernova. Partikel. Dua kata-kata yang telah saya nanti-nantikan selama 8 tahun. Keping-keping baru dari episode yang masih belum terlihat awalnya, dan masih belum terbayangkan akhirnya. Karya tulis berbahasa Indonesia terbaik yang pernah saya baca (dan saya merupakan anak 21 tahun yang membaca Chairil Anwar). Tulisan ini akan membahas tentang Partikel, buku terbaru Supernova karya Dewi Lestari (Dee).

Peringatan Dini: Penulis akan berusaha keras untuk menghindari spoiler (bocoran plot cerita) dan menulis secara objektif, tetapi penulis tidak menjamin akan terbebasnya tulisan ini dari spoiler maupun objektivitas tulisan ini. Baca dengan hati-hati.

Kalau anda belum membaca atau mengetahui Supernova, cari dan beli bukunya sekarang juga. Edisi baru dengan cover baru diterbitkan kemarin (13 April 2012 4:44 Sore). Pergi beli sekarang dan baca. Akan saya tunggu.

Sudah baca? Baik, mari kita mulai pembahasan bukunya.

Setiap buku dari Supernova berisi pertualangan seorang karakter. Supernova pertama, “Kesatria, Puteri, dan Bintang Jatuh” menceritakan pertualangan Ferre – seorang eksekutif muda yang sukses – sebagai seorang Kesatria mencari Puterinya. Supernova kedua berkisahkan Bodhi, seorang manusia (kalau bisa disebut manusia) botak yang mencari arti hidup. Supernova ketiga membawa kita ke pertualangan Elektra, gadis misterius yang dapat mengendalikan petir.

Partikel mengenalkan kita pada Zarah, seorang anak muda yang mencari ayahnya. Perjalanan Zarah dalam mencari ayahnya diceritakan dengan apik, melalui untaian kata yang harmoni. Jika kisah hidup Zarah adalah lautan, Dee membawa kita mengarungi lautan tersebut secara langsung. Dengan berenang tenggelam di dalamnya. Pembaca akan merasakan secara langsung apa yang dirasakan oleh Zarah: tangisnya, senangnya, maupun cintanya. Tidak cukup merasakan emosi dari Zarah yang seolah-olah hidup, Dee juga mengajukan pertanyaan-pertanyaan untuk pembacanya. Benar sekali, kisah hidup Zarah (dan tokoh-tokoh Supernova lainnya juga) merupakan objek kontemplasi yang sangat mendalam. Dengan apik, Dee meleburkan fiksi dengan filsafat, menjadikannya sebuah larutan yang memabukkan sekaligus menyadarkan.

Tak seperti buku lainnya, Partikel memperlihatkan sebuah kekacauan yang aneh. Kekacauan yang harmonis. Ordered Chaos. Keping-keping kisah hidup Zarah terasa sangat jauh terpencar. Setiap kisah, setiap episode, seolah terpotong-potong, dan memiliki ceritanya sendiri-sendiri. Lompatan antara satu kisah dengan kisah lainnya terasa aneh: tiba-tiba, namun tepat. Setiap kisah seperti dihubungkan oleh benang organik tak kasat mata. Benang tersebut mempersatukan tiap keping kisah Zarah menjadi sebuah cerita utuh. Penghubung tiap dunia. Esensi yang mengubah chaos menjadi order.

Terdapat episode cinta dalam Partikel. Juga ada episode renungan. Kisah fantasi? Ada. Pertualangan? Banyak. Alam vs Manusia? Present. Agama vs Sains? Menunggu untuk dibaca. Masih ada topik mengenai filsafat, pendidikan, hubungan antar manusia, drama, dan berbagai topik lainnya. Ragam topik yang disentuh oleh Partikel ini lah yang menjadikannya seolah-olah sebuah kekacauan. Setiap topik disentuh, melalui sudut pandang Zarah. Jika tidak jeli dan terbiasa membaca tulisan sejenis, pembaca akan terhanyut dan tersesat oleh hutan topik yang ditawarkan Partikel. Tetapi banyaknya warna pada Partikel juga menjadikannya sebuah karya yang indah. Rasanya seperti melihat tarian alam semesta: aneh, kacau, tidak berpola, tetapi harmonis. Juga terdapat hal yang tidak mungkin terlewatkan oleh pembaca: kekacauan ini membuat Zarah hidup. Penulis dapat dengan mudah merasakan apa yang dirasakan Zarah. Dee, dengan magis kata-katanya, telah berhasil bercerita mengenai Zarah, dan menjadikannya nyata.

Singkat kata, Partikel merupakan karya sastra Indonesia yang harus anda baca. Siapkan juga waktu 6-8 jam membaca, karena sekali anda masuk ke dunia Zarah (dan Supernova pada umumnya), akan sulit unuk kembali ke dunia nyata lagi. Partikel will blow your mind and create a real Supernova in your head. Selamat berpetualang.

Catatan: Tulisan ini merupakan tugas kuliah saya, yang saya masukkan hanya untuk berbagi. Tesis yang ada pada bagian akhir seharusnya diarahkan kepada “Thesis Statement“, bukan tesis akademis. Hal ini tidak diubah pada post ini untuk menjaga keaslian dan kemurnian tulisan.

AbstrakTulisan ini merupakan sebuah perenungan mengenai filsafat, ilmu pengetahuan, dan teknologi. Bahasan dimulai dari sejarah perkembangan manusia dan perenungan bagaimana dan kenapa filsafat dilahirkan. Keterkaitan antara filsafat dan teknologi juga dijelaskan secara rinci, untuk memperlihatkan apa tujuan dari ilmu pengetahuan dan apa tujuan dari teknologi. Perbedaan antara masalah dan persoalan juga dijelaskan secara gamblang, karena tujuan dari filsafat serta iptek tidak jauh dari definisi kedua hal tersebut. Bahasan terakhir ialah bagaimana perkembangan filsafat dan iptek pada dunia modern dibandingkan dengan masa awal kelahirannya.

Pendahuluan

Manusia merupakan makhluk hidup yang memiliki fisik yang lemah jika dibandingkan dengan spesies lain yang ada di Bumi. Manusia tidak memiliki senjata alami yang terintegrasi dengan tubuhnya. Harimau memiliki cakar dan taring yang sangat mematikan. Ular memiliki bisa yang beracun. Gading seekor gajah dapat mencabik-cabik tubuh mangsanya dengan mudah. Hal yang sangat menarik adalah, meskipun tidak didukung dengan senjata secara alami dalam tubuhnya, manusia tetap dapat berhasil mencapai puncak rantai makanan. Mengapa?

Terdapat dua alasan utama dibalik keberhasilan manusia dalam mencapai puncak rantai makanan: kemampuan reproduksi manusia yang sangat baik (dan cepat), serta inteligensi manusia yang sangat tinggi. Kemampuan reproduksi jelas memberikan keuntungan jumlah kepada manusia, sehingga manusia dapat beramai-ramai berburu predator lainnya dalam alam. Jumlah yang besar tentunya akan berdampak pada potensi keberhasilan sebuah perburuan. Tetapi hal yang lebih penting ialah inteligensi manusia, yang melahirkan berbagai hal seperti senjata, strategi, dan kultur. Kemampuan berpikir manusia inilah yang pada akhirnya membawa manusia kepada kejayaan yang sedang dinikmati manusia sekarang. Puncak rantai makanan dan penguasa dunia.

Tulisan ini akan membahas aspek pikiran manusia, utamanya pada aspek berpikir manusia modern yang menghasilkan renaisans ilmu pengetahuan dan teknologi (iptek) yang sedang dialami.

Flsafat: Sejarah dan Definisi

Salah satu kelebihan utama dari inteligensi manusia ialah kemampuan observasi dan inovasi yang tidak tertandingi. Kemampuan inovasi manusia sudah terlihat dari awal masa evolusi manusia (pada zaman manusia purba). Batu keras dan menyakitkan ketika ditendang. Pukulkan batu ke kepala lawan dan menang. Taring berbahaya karena tajam. Asah batu agar tajam sehingga dapat mengoyak daging buruan. Buruan dapat bergerak lebih cepat, lincah, dan memiliki jarak serang yang lebih besar. Pasangkan batu ke kayu untuk dilemparkan atau menambahkan jarak serang. Jiwa inovasi yang dimiliki manusia secara alami seperti ini merupakan faktor utama manusia mencapai puncak rantai makanan.

Tetapi mencapai puncak rantai makanan tidak sama dengan penguasaan dunia yang dicapai manusia modern. Beruang berada di puncak rantai makanan, tetapi tidak menguasai dunia. Hal yang sama terjadi pada harimau, serigala, elang, dan bahkan buaya. Penguasaan dunia selain memerlukan tempat di puncak rantai makanan juga memerlukan kemampuan komunikasi dan koordinasi yang sangat luar biasa. Diperlukan kemampuan komunikasi untuk menjelaskan dan memahami masalah-masalah yang kompleks. Juga diperlukan kemampuan saling membantu dan bersatu dalam mencapai tujuan yang sama. Kemampuan observasi manusia yang tidak tertandingi pada akhirnya melahirkan alat bagi manusia untuk mencapai tujuan tersebut: bahasa.

Kemampuan berbahasa manusia membuka kemungkinan bagi manusia untuk berkomunikasi dengan baik satu sama lain. Komunikasi memudahkan koordinasi. Koordinasi yang baik menghasilkan keteraturan. Pria berburu sementara wanita menjaga tempat tinggal dan merawat anak-anak. Perpindahan tempat tinggal dilakukan bersama-sama untuk memudahkan penaklukan daerah baru. Kepala suku membagi-bagikan tugas kepada anggota suku agar pekerjaan berjalan dengan efisien. Pada akhirnya, kemampuan komunikasi manusia menghasilkan kultur (peradaban). Kemampuan reproduksi manusia dikombinasikan dengan peradaban yang terbangun menyebabkan jumlah populasi yang ada dalam sebuah peradaban menjadi sangat besar. Besarnya populasi sebuah peradaban menyebabkan cara hidup nomaden (berpindah-pindah) menjadi tidak praktis. Manusia akhirnya berhenti menjalani hidup nomaden dan tinggal permanen pada satu tempat tertentu.

Bertempat tinggal permanen menyebabkan manusia dapat memikirkan banyak hal baru, seperti fenomena-fenomena kehidupan dan lingkungan, pemikiran kritis manusia secara luas, dan berbagai hal mendasar lainnya. Penjabaran hal-hal tersebut dalam bentuk konsep dasar merupakan apa yang dikenal dunia modern sebagai filsafat. Filsafat berbicara mengenai banyak hal, mulai dari eksistensi, pengetahuan, nilai kehidupan, sebab-akibat, pikiran, sampai ke bahasa. Filsafat sendiri berasal dari bahasa Yunani philosophia yang berarti “cinta akan kebijaksanaan”. Seorang filusuf sejati tidak pernah lelah dan berhenti mencari kebenaran.

Filsafat dan Iptek

Pilar utama pembangun filsafat ialah pemikiran kritis dan rasional. Filsafat tidak hanya mencari ide-ide baru, tetapi juga melakukan analisa dan pengujian terhadap buah pemikiran baru tersebut. Selalu terdapat kontroversi antara dua filusuf dengan pandangan yang berbeda pada setiap zaman. Anselm dari Canterbury dan Gaunilo dari Marmoutiers, Bertrand Russell dan Kurt Gdel, Ren Descartes dan Blaise Pascal, Leonhard Euler dengan Daniel Bernoulli dan Gottfried Leibniz dengan Christian Wolff, Bishop Berkeley dan Samuel Johnson, Immanuel Kant dan David Hume, dan lainnya. Hal ini bukan berarti filsafat memiliki kecintaan akan kontroversi. Pemikiran kritis dan rasional akan melahirkan analisa dan pengujian yang baik. Setiap analisa dan pengujian akan melahirkan pihak yang mengajukan klaim dan oposisinya. Hal inilah yang menyebabkan banyaknya kontroversi pada sejarah filsafat.

Filsafat mengamati fenomena. Fenomena merupakan segala sesuatu yang dapat dilihat, dialami, atau dirasakan. Sebuah fenomena bersifat netral, maksudnya adalah sebuah fenomena terjadi secara alami, dan terjadi tanpa menguntungkan atau merugikan siapapun. Fenomena juga dapat bersifat tidak dikehendaki, terjadi di luar pola yang ada dan biasanya memihak, dalam artian memberikan keuntungan bagi satu pihak dan memberikan kerugian bagi pihak lainnya. Fenomena yang bersifat netral disebut sebagai masalah, dan fenomena yang tidak netral disebut persoalan. Masalah merupakan sesuatu yang dipelajari untuk dimengerti penyebab dan cara kerjanya. Persoalan merupakan sesuatu yang tidak dikehendaki, karenanya dipelajari untuk dicari penyelesaiannya. Contoh dari sebuah masalah ialah keberadaan sebuah sungai, atau fenomena hujan. Sedangkan contoh dari persoalan misalnya banjir yang dapat disebabkan oleh meluapnya sungai. Perhatikan bagiamana dalam contoh yang diberikan, sebuah masalah (sungai) dapat berubah menjadi sebuah persoalan (banjir)!

Filsafat pada perkembangannya akan menghasilkan ilmu pengetahuan, dan ilmu pengetahuan pada perkembangannya akan menghasilkan teknologi. Ilmu bersifat pasteritori, yakni kesimpulan ditarik setelah dilakukan pengujian berulang. Filsafat, di lain pihak, bersifat priori, yaitu kesimpulan ditarik berdasarkan pemikiran dan perenungan, bukan pengujian berulang. Filsafat merangsang kelahiran keinginan untuk observasi dan eksperimen karena proses berpikirnya yang kritis dan rasional. Observasi mendalam dan eksperimen berulang akhirnya akan menghasilkan ilmu pengetahuan baru. Secara sederhana dapat dikatakan bahwa ketika seorang filusuf merenungkan dan mendalami sebuah masalah, maka ia menghasilkan sebuah ilmu pengetahuan baru untuk menjelaskan sebab-akibat dari sebuah masalah. Hal ini jugalah yang menyebabkan hampir semua filusuf awal juga merangkap sebagai ilmuwan. Misalnya: Plato, Aristotle, dan Pythagoras. Pada perkembangan lebih lanjut, filusuf yang merangkap ilmuwan jarang ditemui karena perkembangan ilmu filsafat pada tingkat praktis dikalahkan oleh perkembangan iptek pada tingkat praktis.

Ketika seorang filusuf merenungkan dan mendalami sebuah persoalan, maka ia akan menghasilkan sebuah teknologi baru untuk menyelesaikan persoalan tersebut. Teknologi umumnya memanfaatkan (menerapkan) ilmu pengetahuan untuk mencapai tujuan yang diinginkan. Dalam dunia pendidikan modern, pengembangan teknologi bahkan memiliki cabang ilmunya sendiri, yaitu Rekayasa (Engineering). Perkembangan teknologi manusia sudah bermula dari zaman purba, ketika sebuah batu dan kayu diikatkan untuk menjadi tombak atau ketika roda diciptakan untuk mempermudah perpindahan tempat tinggal manusia. Teknologi biasanya dimanfaatkan untuk memudahkan manusia dalam pengaturan dan adaptasi terhadap lingkungan. Secara sederhana, teknologi dapat didefinisikan sebagai pengembangan dan pemanfaatan berbagai ilmu pengetahuan, perangkat, teknik, sistem, atau metode untuk menyelesaikan sebuah masalah tertentu.

Perkembangan Filsafat dan Iptek pada Dunia Modern

Pada masa awal kelahirannya, filsafat dan iptek diajarkan dengan cara diskusi terbuka, baik yang sifatnya personal (antar dua orang) atau berkelompok. Transfer ilmu dilakukan melalui ceramah oleh para filusuf atau guru yang telah memiliki reputasi. Pada masa ini sampai ke masa awal pengembangan penulisan, pembelajaran masih tidak dilakukan secara sistematik. Pada perkembangan selanjutnya (di dunia pendidikan modern, yang dimulai sekitar 1000 tahun yang lalu) pendidikan baru dilakukan secara sistemik.

Dalam dunia modern, pendidikan atau transfer ilmu pengetahuan maupun metode pemikiran dilakukan pada sebuah institusi khusus, yaitu institusi pendidikan. Transfer ilmu dilakukan secara lisan maupun tulisan. Pembelajaran dasar-dasar ilmu yang telah terbukti dan teruji dilakukan pada institusi pendidikan dasar (di Indonesia: SD, SMP, SMA). Pendidikan lanjutan dan penelitian (pencarian pengetahuan baru) dilakukan pada institusi perguruan tinggi (Universitas). Sebuah perguruan tinggi memberikan gelar akademis, yang berarti perguruan tinggi tersebut memberikan pengakuan bahwa orang yang bergelar akademis dalam suatu bidang telah mendapatkan pendidikan yang memadai dalam bidang tersebut, dan bahkan mungkin telah berkontribusi kepada bidang ilmu tersebut. Gelar Sarjana diberikan kepada orang yang menuntut ilmu di perguruan tinggi (mahasiswa) dan telah dianggap menguasai sebuah bidang ilmu. Gelar Master dan Doktor diberikan kepada mahasiswa yang telah memberikan kontribusi dalam sebuah bidang ilmu tertentu. Seorang dengan gelar Master telah melakukan penelitian dan ujicoba penerapan teori lama pada lingkungan baru, sedangkan seorang Doktor biasanya telah mengembangkan teori baru untuk bidang ilmunya.

Tesis merupakan sebuah dokumen resmi yang dikumpulkan kepada perguruan tinggi untuk mendapatkan gelar Master. Sebuah Tesis berisi hasil penelitian dan penemuan dari penulisnya. Tesis dan Disertasi merupakan buah pemikiran dari mahasiswa maupun akademisi lainnya yang merupakan ujung tombak dari perkembangan ilmu pengetahuan dan teknologi pada dunia modern. Dapat dikatakan bahwa Tesis dan Disertasi merupakan hal yang setara dengan tulisan, argumen, maupun catatan eksperimen pada generasi filsafat dan keilmuwan dahulu (seperti Plato dan Aristotle).

Kesimpulan

Filsafat merupakan buah dari pemikiran manusia, yang didasarkan pada perenungan terhadap fenomena yang terjadi disekitarnya. Filsafat merenungkan fenomena netral (masalah) maupun fenomena tidak netral (persoalan). Dalam perkembangannya, filsafat menghasilkan ilmu pengetahuan, dan pemanfaatan ilmu pengetahuan untuk mencapai tujuan tertentu menghasilkan teknologi. Pada perkembangan awal, seorang filusuf kerap juga menjadi seorang ilmuwan karena kedekatan antara filsafat dan iptek. Tetapi pada masa modern, di mana ilmu pengetahuan telah jauh lebih berkembang dari filsafat dalam pengunaan praktis, sudah jarang terlihat seorang filusuf yang juga sekaligus seorang ilmuwan. Cara menuntut ilmu juga berubah dari pembelajaran otodidak dan diskusi menjadi model pembelajaran pada institusi. Kemajuan ilmu pengetahuan dan teknologi pada dunia modern didorong oleh publikasi hasil penelitian dan penemuan para akademisi, yang dibuat dalam bentuk Tesis atau disertasi.

Referensi

[1] StackExchange Community What is Philosophy?, available at http://philosophy.stackexchange.com/questions/41/what-is-philosophy Jun. 2011. 07 Feb. 2012.
[2] StackExchange Community Does Philosophy Belong to Empirical Science or Formal Science?, available at http://philosophy.stackexchange.com/questions/527/does-philosophy-belong-to-empirical-science-or-formal-science Jun. 2011. 08 Feb 2012.
[3] Stanford SEP Philosophy of Technology, available at http://plato.stanford.edu/entries/technology/ Jun. 2009. 07 Feb. 2012.
[4] Saswiandi Sasmojo Science, Teknologi, Masyarakat, dan Pembangunan Bab II, Penerbit ITB, Bandung, 2005.
[5] Slamet Ibrahim, Filsafat Ilmu Pengetahuan Catatan Kuliah, Institut Teknologi Bandung, Bandung, 2008

A Masterpiece: Dee should be Indonesia's Shakesphere

Kalau ada penulis yang paling menginspirasi saya, orang tersebut adalah Dee. Bukan hanya tulisannya bagus dan sangat menyenangkan dibaca, Dee mampu membius saya. Membatalkan semua rencana dan janji saya yang telah dibuat untuk satu hari. Hanya untuk membaca karyanya. Berpetualang bersama pikirannya. Tidak ada satupun buku atau tulisannya yang tidak saya selesaikan dalam satu hari. Tulisan-tulisan Dee punya magic tersendiri. Membaca tulisannya membuat saya merasa terhubung dengannya. Kenal dengannya. Bersahabat dengannya. Aneh. Lucu. Hangat.

Saya pertama kali membaca karya Dee melalui bukunya, “Supernova: Ksatria, Puteri dan Bintang Jatuh”. Setelah membaca buku tersebut, saya tidak dapat berhenti. Saya mencari dan kemudian membaca dan membaca karya-karya lainnya dari Dee. Ada sensasi aneh dalam membaca karyanya. Thought provoking. Fun. Dan yang paling menarik, saya benar-benar terlibat dalam petualangannya. Saya ingat Ferre. Perjalanannya. Hidupnya. Sepinya. Pencerahannya. Saya ingat Bodhi. Kebebasannya. Cintanya. Kesedihannya. Bintangnya. Saya ingat Elektra. Keanehannya. Keluguannya.

Tokoh-tokoh dalam kisah Dee selalu unik. Rico de corro. Kugy. Semuanya selalu menarik saya ke dalam perjalanan, sebuah perjalanan yang merubah saya. Memabukkan, seperti ekstasi. Tulisan Dee membawa perubahan, dan penyegaran. It never failed to make me think – and rethink. Awalnya, saya ingin menuliskan review untuk mandre. Tetapi benar-benar tidak ada kata-kata yang dapat saya gunakan untuk mendeskripsikannya. Terdapat tulisan-tulisan yang sudah pernah saya baca entah di mana seperti “Semangkok Acar untuk Cinta dan Tuhan” dan “Menunggu Layang-Layang“. Membaca tulisan ini memberikan sensasi indah: pulang ke rumah. Pulang ke rumah setelah perjalanan panjang. Setelah petualangan yang melelahkan.

Rasa yang belum dapat saya ilustrasikan dengan baik. Rasa yang selalu muncul ketika membaca karya-karyanya. Tulisan Dee tidak pernah kehilangan sihir misterius tersebut. Tidak ada yang dapat saya katakan selain baca dan mabuklah!

Keamanan sistem merupakan salah satu bagian dalam pengembangan perangkat lunak yang sangat sulit untuk dibuat dengan benar. Sebagai pengembang, kita akan selalu berusaha mati-matian untuk menjaga sistem yang kita bangun dari tangan yang tidak bertanggung jawab. Di sisi lain, para perantas akan terus menerus berusaha untuk membobol sistem kita dengan berbagai alasan, mulai dari pemuasan ego sampai dengan pencurian data. Terdapat berbagai teknik dalam mengamankan sistem yang anda bangun, dan kita akan membahasnya satu demi satu. Pembahasan dilakukan terutama berpusat pada keamanan aplikasi web, meskipun sebagian teknik yang dibahas akan relevan juga jika diterapkan di dalam aplikasi jenis lain (desktop, mobile) secara umum.

Website modern pada umumnya bersifat dinamis: baik pemilik web maupun pengunjung dapat berkontribusi dalam memberikan konten untuk website tersebut. Hal ini tentunya telah membuka berbagai peluang dalam pengembangan web yang menarik, dan seperti peluang-peluang pada umumnya, ia datang dengan membawa beberapa konsekuensi “kecil”. Memperbolehkan pengunjung untuk berkontribusi dalam website berarti satu hal: sistem website yang dibangun harus siap untuk menerima masukan dari pengguna. Tentunya kita tahu bahwa hal ini tidak pernah berarti baik. Masukan data dari pengguna tidak pernah dapat dipercaya. Tidak dipercaya oleh pengembang sistem yang baik, setidaknya.

Website dinamis, yang memungkinkan penambahan konten dari pengunjung, telah membuka berbagai celah keamanan baru. CSRF. XSS. SQL Injection. Dan masih banyak lainnya. Kali ini kita hanya akan membahas bagaimana menangani salah satu jenis XSS. Cross Site Scripting (XSS) merupakan celah keamanan di mana pengguna diperbolehkan untuk mengisikan berbagai kode program client side pada website. Konsekuensinya? Seorang pengguna yang ingin mendapatkan semua cookie milik pengunjung situs anda akan memberikan ucapan selamat kepada anda.  Umumnya, terdapat dua jenis celah keamanan XSS, yaitu:

  1. Non-Presistent: Celah keamanan yang memungkinkan pengguna jahat untuk memasukkan kode-kode program langsung ke dalam sistem anda: setiap pengunjung yang membuka website anda akan menjalankan kode program yang dibuat pengguna tersebut.
  2. Presistent: Celah keamanan di mana memungkinkan pengguna jahat untuk menjalankan kode dari doman (website) lain ketika pengguna mengakses situs anda melalui link yang diberikan oleh pengguna jahat.

Pembahasan kali ini hanya akan mengupas XSS Non-Presistent.

Mengapa bisa terjadi XSS Non-Presistent?

Karena pengembang website memperbolehkan pengunjung menuliskan apa saja di dalam websitenya. “Apa saja” yang saya maksudkan bukan “apa saja” dalam artian topik tulisan, melainkan teks aktual dari tulisan pengunjung. Misalkan untuk kotak komentar dalam blog ini. Pengembang sistem yang optimis akan membayangkan bahwa isi komentar dari pengunjung selalu berupa teks, misalnya:

Wah penulis blog ini benar-benar ganteng. Saya terpesona melihat tulisan dan wajahnya.

Dan berbagai tulisan yang serupa, tanpa ada pengunjung yang mengerti HTML. Sehingga ketika muncul satu pengunjung dari Mars yang mengerti HTML dan menuliskan komentar seperti:

Wah, blog ini bagus sekali.
<script type="text/javascript">
// berbagai kode dari mars untuk mencuri cookie pengguna **sensor, red**
</script>

Boom. Mendadak seluruh pengunjung yang melihat blog ini berhasil dicuri cookie-nya oleh pengunjung dari Mars. Memungkinkan pengunjung untuk menulis di dalam website anda adalah sebuah ide yang bagus: komunikasi akan terbangun, dan pengunjung anda akan berkontribusi memberikan berbagai informasi yang terlewatkan oleh anda sewaktu menulis. Tetapi anda harus ingat, cepat atau lambat pasti akan ada pengunjung yang memanfaatkan kebebasan mereka dengan cara yang salah.

Jadi, Bagaimana Menanganinya?

Secara umum terdapat tiga cara untuk menangani tulisan yang dibuat oleh pengunjung, yaitu:

  1. Tidak memperbolehkan semua tag HTML. Setiap < akan diubah menjadi kode “&lt” sehingga dianggap sebagai teks oleh browser.
  2. Black list: dengan tidak memperbolehkan tag tertentu untuk masuk, misalnya memanfaatkan regular expression untuk membuang tag <script> dari pengguna.
  3. White list: dengan memperbolehkan hanya tag tertentu saja dari tulisan yang diberikan pengguna.

Cara pertama akan memastikan anda aman dari serangan XSS Non-Presistent, tetapi konten yang diberikan oleh pengunjung anda akan menjadi kurang menarik. Tanpa adanya tag HTML, pengguna tidak dapat membuat tulisannya menjadi tebal untuk penekanan, maupun miring untuk istilah asing. Pengunjung juga tidak dapat membuat tabel, poin-poin tulisan, dan banyak hal lain. Jika memang tidak ingin hal-hal yang disebutkan sebelumnya, pilhan pertama adalah cara mudah dan cepat untuk menghindari XSS. Tetapi jika ingin memberikan sedikit kebebasan kepada pengguna, anda akan hanya memiliki dua pilihan: white list atau black list.

White list akan selalu lebih baik dibandingkan black list. Dengan memberikan black list, pengguna jahat akan selalu menemukan cara untuk melewati black list tersebut, seperti kita akan terus menemukan celah-celah dalam berbagai peraturan. Sesuatu yang bersifat melarang hanya pada kondisi tertentu sangat rentan oleh berbagai kelemahan dalam larangan tersebut. Hal ini menjadi lebih parah beberapa kali lipat dalam hal sistem komputer, karena komputer sangat baik dalam melakukan automasi: seorang perantas dapat membuat program otomatis untuk mencoba berbagai variasi input sampai sistem anda jebol.

Dengan white list, di lain pihak, hal tersebut tidak akan dapat dilakukan. Ketika membuat white list, anda memastikan bahwa tidak ada tag, atau pengguna, atau wanita, atau mobil yang dapat masuk ke tempat terlarang selain hal-hal yang telah anda perbolehkan masuk. Segala hal selain yang anda izinkan tidak boleh masuk. Karena daftar hal-hal yang anda izinkan sangat terbatas, maintenance dari hal-hal tersebut akan menjadi sangat mudah. Tag yang umumnya diperbolehkan yaitu:

address, a, abbr, acronym, area, b, big, blockquote, br, caption, cite,
class, code, col, del, dd, div, dl, dt, em, font, h1, h2, h3, h4, h5,
h6, hr, i, img, ins, kbd, li, map, ol, p, pre, q, s, span, strike,
strong, sub, sup, table, tbody, td, tfoot, tr, tt, ul, var

Kode Program

Cukup teorinya. Kita akan melihat bagaimana membuat fungsi untuk pencegahan XSS, melalui penyegelan seluruh tag HTML maupun white list. Kode program dibuat dalam PHP, karena PHP merupakan bahasa yang sangat populer dalam pengembangan web.

Larangan Terhadap Seluruh Tag HTML

Merupakan cara yang sangat mudah. Untuk membuat larangan seluruh tag HTML, gunakan fungsi htmlentities dari PHP:

function sanitizing($kontenPengguna)
{
    return htmlentities($kontenPengguna, ENT_QUOTES);
}

White List

Melakukan white list tag HTML adalah hal yang cukup sulit dilakukan. Meskipun PHP telah menyediakan fungsi strip_tags untuk hal tersebut. Sebagai bahasa paling populer untuk membangun web, PHP pastinya telah mengetahui kebutuhan para pengembangnya. Berikut adalah contoh pengunaan fungsi strip_tags:

function string_safe_output($text)
{
    // tag yang diperbolehkan.
    $tags = '<b><u><i><ul><ol><li><p><span>';
    return strip_tags($text, $tags);
}

Tetapi perlu diingat bahwa fungsi strip_tags tetap masih memiliki celah keamanan: atribut HTML tidak dihilangkan, sehingga pengguna yang ingin melakukan serangan tetap dapat melakukannya dengan memasukkan atribut pada tag legal. Misalnya, pada kode di atas pengguna dapat menuliskan:

<p onhover="javascript:cookieSteal()">Bla bla bla</p>

Karenanya, jangan pernah gunakan hanya fungsi strip_tags untuk melawan XSS. Berbagai validasi dalam DOM harus dilakukan untuk mendapatkan hasil output HTML yang benar-benar aman dari serangan. Karena kompleksitas kode yang sangat tinggi, sangat disarankan untuk menggunakan library atau framework yang telah teruji dengan baik seperti HTML Purifier.

Pengunaan HTML Purifier menyederhanakan pengamanan, yang awalnya membutuhkan ratusan baris menjadi hanya beberapa baris (tidak menghitung autoloader dan konfigurasi):

function string_safe_output($text)
{
    $HTMLPuirifier = new HTMLPurifier();
    $clean_html = $purifier->purify($text);
    return $clean_html;
}

Dan dalam sekejap, kode anda telah aman sepenuhnya dari XSS Non-Presistent. Selanjutnya kita akan membahas mengenai penanganan XSS Presistent. Tetapi tentunya, anda dapat mencoba berkesperimen dengan berbagai cara menangani XSS Non-Presistent. Have a fun coding season!

Bacaan lanjutan:

I seldom typing code in front of people, and when I do, the code quality degrade massively. Most of the time, the code just don’t work or have an obvious bug. I can’t even debug when there’s people around me. Many people always ask me why, because when I’m alone, I tend to write an okay-code: a code that works. So why?

Because most of the time when I’m coding, I use what people call Rubber Duck Debugging, and I’m addicted to it, so I can’t code well when I’m not doing it. So what is this rubber duck debugging? It’s a technique where we do debugging while eating a rubber duck. *AHEM* Okay, seriously. It’s a technique of debugging where while debugging, a programmer read the code, line by line, aloud, to something. And because a great software developer loves rubber duck, that “something” is a rubber duck. Hence, the name.

What’s so special in rubber duck debugging, aside from it makes people think you’re a freak? It forces you to think, to explain your code line by line to the duck, because you know if you’re doing something wrong – some silly, deadly, sinful code – the duck will turn into a raptor and eats you. I don’t use a rubber duck by the way, I use a pencil, a pen, or whatever item within my reach. It’s a great way to debug, and it helps me more that Visual Studio or Eclipse ever did. I’ve done programming this way since I’m a kid and I’m also forced to do it when teaching, so I can’t just leave the habit. But it’s a great alternative way to debug when your IDE can’t help you. Trust me.

Another reason why I’m not so good when people surrounds me is I can’t get my mind to work when I’m not in trance. More on that in the next post. Meanwhile, happy debugging 🙂