Kenapa aku bengang tahap gaban bila sistem tak encryptkan kata laluan pengguna

Baru baru ni aku boring, duduk dalam pejabat sambil merenung carta InBody yang baru aku cetak di gim FSR. Mesin InBody mencadangkan aku buang 23 Kg lebih lemak untuk lebih fit, haih … Jadi untuk kekal aktif, aku pun lancarkan terminal untuk mencari jika ada sistem di dalam UiTM ini yang boleh aku explore.

Dan aku jumpa satu sistem, digunakan untuk tujuan clock in/clock out. Menarik, tidak perlu kad perakam, tidak perlu cap jari, hanya perlu login ke dalam sistem dan klik pautan sama ada kita ingin daftar masuk atau daftar keluar. Bukanlah sesuatu yang baru, tetapi the fact that users are trusted with this kind of system deserves a credit. Jadi selepas mencuba beberapa vulnerability, aku dapati sistem ini ada kelemahan SQL Injection. Fine … ini bukan yang pertama, malah ada beberapa lagi sistem di UiTM yang mempunyai kelemahan yang sama, lagi pun sistem ini tidak mempunyai sensitif data, it should be ok.

Lalu aku pun cuba dig in further kedalam pengkalan data untuk melihat table-table yang ada untuk paham sistem ini dengan lebih lanjut. Dan aku rasa bengang bila melihat sistem ini menyimpan kata laluan pengguna dalam bentuk clear-text. Wah … ini adalah satu kesalahan besar. Sungguh besar dan dasyat sehingga aku sanggup luangkan masa untuk tulis entri ini, dah la dah setahun aku tak update blog ini, menyusahkan betul. Ha ha ha …

Kenapa? Kenapa ianya satu kesalahan yang besar?

Sebab mengikut kajian, rata-rata pengguna akan menggunakan kata laluan yang sama bagi semua sistem. Jadi tak kiralah emel ke, sistem perakam waktu ke, sistem perbankkan ke, sistem untuk beli produk Kak Ton ke, kebanyakkan pengguna, akan menggunakan kata laluan yang sama. Maknanya, kalau ada penceroboh yang berjaya masuk kedalam sistem ini, dia boleh cuba untuk login kedalam akaun facebook mangsa atau emel mangsa dan hijack akaun tersebut. Tak ke naya?

Jadi it is important to stress that ianya adalah tanggungjawab pembina sistem, untuk memastikan keselamatan kata laluan ini.

Ala, ni sistem bodoh je, patutnya pengguna pakai la kata laluan yang main main, macam abc123 ke, password ke, 5hariMC ke” kata programmer yang mungkin dilihat dari saiz pipinya tidak pernah merasa kasut size 8.

Tolong buang mentaliti ini yer sebab wahai programmer, tidakkah anda sedar bahawasanya anda juga menggunakan sistem yang lain, tidakkan anda mahu sistem tersebut menjaga keselamatan kata laluan anda?

Mari kita lihat bencana yang boleh berlaku akibat tidak menyahkodkan kata laluan pengguna. Walkthrough ini akan memberi gambaran apa yang boleh dilakukan oleh pencoroboh jika mendapati kata laluan tidak di encrypt. Dan kita boleh lihat bagaimana kecuaian programmer ini memakan dirinya sendiri. Ayoh!

 

Data-data pengguna di dalam sistem

Langkah pertama ialah mendapatkan data dengan menggunakan SQL injection daripada table users untuk melihat katanama dan katalaluan pengguna sistem. Kita dapat lihat di sini, ada satu akaun didalam table users yang mempunyai role sebagai superadmin, wah! Lebih menarik lagi, kata laluannya boleh di baca. Jadi sekarang kita boleh login ke dalam sistem dengan menggunakan kata laluan tersebut dan menjadi admin sistem. Hooray!

Laa tu jer? Tak menarik langsung …

Sabar anak muda, di bulan yang mulia ini cuba kawal sifat ketidaksabaran mu itu. Betul, kalau setakat boleh login sebagai admin apakah faedahnya? Sedangkan kita sudah ada full access kepada pengkalan data bukan? Itu umpama Gaban yang diberikan tempat menyalin pakaian sedangkan kita sedia maklum Gaban boleh menukar pakaian dalam masa 0.05 saat, terlalu pantas untuk dilihat sehingga perlu diperlahankan. Hahaha …

So next step kita cuba port scan server tersebut untuk lihat apa service yang available.

 

Senarai servis yang berjalan di server

 

Jadi kita dapat lihat server ini menjalankan berbagai servis, dan aku berani jamin, kebanyakkan servis ini menggunakan kata laluan admin yang sama. Mari kita cuba servis SSH (By the way, SSH adalah satu servis yang membenarkan kita untuk masuk kedalam server dan jalankan arahan), mungkin tak kita boleh login sebagai root dan menggunakan password admin yang sama? Mari kita lihat.

 

Betul tak? 1 Password for all.

 

Nah, server sudah dimiliki sepenuhnya oleh penceroboh. Sekarang ini penceroboh boleh melakukan apa saja terhadap sistem, kebiasannya mereka akan memasang backdoor supaya mereka boleh masuk lagi ke dalam server walaupun password sudah diubah. Dan satu-satunya jalan untuk pastikan tiada backdoor adalah dengan reinstall OS yang baru. Sad …

Tetapi, itu juga mungkin tidak akan menyelesaikan apa-apa, kerana kita perlu ingat. Pencoroboh boleh meletakkan apa yang dinamakan web-shell didalam sistem yang telah dibangunkan. Jadi walaupun server admin install OS yang baru, tapi bila mereka letak semula sistem yang lama, maka penceroboh masih boleh mengawal server dengan menggunakan web shell yang telah ditanam. Melainkan admin, cari sampai dapat fail fail backdoor yang telah ditanam dan monitor sebarang aktiviti masuk ke dalam server.

Letih bukan? Bukankah lebih mudah jika kata laluan tadi sudah di encrypt pada peringkat awal.

Tapi abam, saya tak pandai lah nak run command, caner?

Aaa … betul jugak kan, kan lebih mudah kalau boleh akses server melalui GUI dan navigate macam kita duduk depan server itu sendiri. Cuba tengok keputusan yang kita dapat semasa buat port scan tadi, nampak tak dekat situ ada satu servis nama dia VNC. Ha .. itu maknanya kita boleh akses menggunakan GUI. Macam mana? Macam ni.

 

Langkah 1: Connect ke server menggunakan VNC Client

 

Lancarkan VNC client pada komputer anda, jika pada Mac OS, ianya memang sudah tersedia dengan VNC client.

 

Langkah 2: Masukkan password, hopefully password yang sama digunakan.

 

Paparan untuk memasukkan kata laluan akan ditunjukkan, jika tekaan kita betul, password untuk servis VNC ini juga akan menggunakan password admin yang sama.

 

Langkah 3: Enjoy!

 

Wahaha, terus terpapar desktop server tersebut dihadapan kita. Kita boleh explore server tersebut seperti ianya macam PC kita sendiri. Best tak?

Jadi seperti yang dapat kita lihat, ianya amatlah berbahaya jika kata laluan ini tidak dijaga dengan betul. Ini belum lagi kita cuba untuk akses email atau facebook admin tersebut. Kebarangkalian kata laluannya adalah sama amat tinggi, seperti yang kita telah lihat di atas. 1 password digunakan untuk semua servis. Risiko yang sama juga terdedah kepada pengguna sistem yang lain dimana penceroboh boleh menggunakan katalaluan yang ada untuk cuba akses akaun user tersebut di sistem yang lain.

Diharap entri ini dapat mengingatkan kita semua supaya bertanggungjawab ketika membina sistem dan jangan ambil jalan mudah. Hargailah kepercayaan yang telah diberikan kepada kita. Terutamanya kepada pelajar-pelajar yang akan graduasi, pastikan anda tidak melakukan kesalahan yang sama …

Sehingga entri yang lain …

7 Comments

UiTM-CTF 2012 : Thank you and see you guys next year!

Alhamdulillah, akhirnya pada 9 hb Jun 2012 yang lepas, saat yang dinanti-nantikan tiba jua, UiTM-CTF 2012 telah berjaya berjalan dengan agak lancar, haha! UiTM-CTF 2012, yang pertama kali dianjurkan pada tahun ini, adalah pertandingan hacking pertama yang dianjurkan di UiTM (mungkin juga di Malaysia), yang membenarkan peserta untuk hack server masing-masing (term yang diberi nama attack and defense), tanpa perlu berada di dalam tempat yang sama.

Idea UiTM-CTF 2012 ini datangnya selepas kami (UiPC), merasakan ada kelemahan dengan sistem sekarang ini dimana tidak ada ruang bagi pelajar untuk mencuba atau memasuki pertandingan Hacking pada peringkat UiTM. Kami masih ingat pada sekitar tahun 2002, pihak fakulti pernah menganjurkan pertandingan Hacking bagi pelajar-pelajar di Fakulti, dan dengan cara ini kita dapat mengenalpasti pelajar-pelajar yang rupanya berbakat dalam bidang security. Tetapi, disebabkan pertandingan tersebut menjadi lebih besar sehingga ke peringkat antarabangsa, maka makin sedikitlah peluang bagi pelajar-pelajar kita untuk masuk pertandingan tersebut. Jadi kami ingin kembalikan zaman kegemilangan itu semula, so guys, remember UiTM-CTF 2012 is for all of you. Yeah! Haha …

Anyway, back to UiTM-CTF 2012, pertandingan ini bermula pada tepat pukul 12:00 AM sabtu 9 haribulan Jun dan berakhir pada tepat pukul 12:00 AM ahad 10 haribulan Jun. Seramai 50 kumpulan yang telah mendaftar dari beberapa buah kampus, here’s the chart:

Carta kumpulan mengikut kampus

Carta kumpulan mengikut kampus

Kita dapat lihat pecahan kumpulan adalah seperti berikut:

  1. Shah Alam – 26 kumpulan
  2. Arau – 5 Kumpulan
  3. Machang – 1 Kumpulan
  4. Segamat – 4 Kumpulan
  5. Sri Iskandar – 1 Kumpulan
  6. Sungai Petani – 13 Kumpulan

Beberapa jam sebelum pertandigan bermula, peserta telah diberikan satu zip file yang mengandungi vulnerable box. Untuk memastikan semua peserta hanya dapat melihat vulnbox pada masa yang sama, zip file tersebut telah diletakkan dengan kata kunci yang panjang, supaya jika ada peserta yang ingin brute-force kata kunci tersebut, ianya akan mengambil masa yang lama sehinggakan waktu pertandingan telah pun tamat, haha.

Sebelum kita pergi ke acara sebenar, mari kita lihat dahulu architecture network bagi UiTM-CTF 2012:

Network Diagram For UiTM-CTF 2012

Daripada gambar rajah diatas kita dapat lihat overview pertandingan ini. Setiap peserta akan diberikan satu vulnerable box untuk mereka defense. Dalam setiap vulnerable box telah diinstall dengan 4 services yang mempunyai kelemahan sekuriti. Tugas peserta adalah untuk study kelemahan pada 4 services tersebut, menutup kelemahan dan kemudian menggunakan kelemahan itu untuk serang peserta lain.

Selain daripada attack and defense, pertandingan ini juga menyediakan challenges iaitu soalan yang perlu diselesaikan oleh peserta untuk mendapatkan markah, challenges terdiri daripada category berikut:

1. Binary
2. Crypto, dan
3. Forensic

Peserta juga boleh menulis advisories tentang challenges yang telah mereka solve, ini untuk mengajar pelajar tentang dunia sekuriti sebenar dimana advisories selalu dikeluarkan oleh mereka-mereka yang menjumpai kelemahan dalam perisian.

Berbalik kepada malam sebelum bermulanya pertandingan, peserta telah pun beramai-ramai memenuhi lab yang disediakan. Jumlah pelajar yang hadir amatlah mengagumkan hingga membuatkan kami menitiskan air mata diatas sokongan yang diberikan, haha.

Tepat jam 11 malam, kata kunci untuk zip file diberikan kepada semua peserta melalui chat room dan peserta diberikan 1 jam untuk setup vulnerable box masing-masing. Tepat pada jam 12 malam, pertandingan pun bermula. Halangan pertama peserta ialah untuk mendapatkan login credentials bagi vulnerable box kerana ianya tidak diberi. Ini adalah kerana kami ingin mendidik peserta bahawa username dan password adalah tidak berguna jika attacker mempunyai physical access kepada sistem.

Berikut adalah ranking pada pukul 6 petang:

Current result at 6 PM

Kita dapat lihat kebanyakan peserta menghabiskan masa mereka membuat challenge tetapi tidak fokus kepada bahagian attack. Pada masa ini cuma team unicorn sahaja yang sudah mula menyerang pasukan-pasukan lain.

Berikut pula adalah ranking pada pukul 11:30 malam, setengah jam sebelum pertandingan tamat:

Ranking terkini pada pukul 11:30 Malam

Kumpulan Unicorn masih lagi mendahului tetapi kumpulan nextHorizon dan Jihad telah mula pandai menyerang dan mengekori rapat dibelakang. Adakah mereka berjaya memintas Unicorn?

Final result bagi yang tak sabar nak tengok:

Final Ranking at 12 AM.

Tahniah team Unicorn, Jihad, nextHorizon, JustTry dan Vy_shark kerana telah berjaya mendapatkan tempat 5 teratas bagi UiTM-CTF 2012. Hadiah bagi semua pemenang akan disampaikan pada iHack 2012 akan datang. Tahniah sekali lagi!

Kami pihak penganjur ingin mengucapkan jutaan terima kasih kepada semua peserta yang telah sudi meluangkan 24 jam anda untuk menyertai UiTM-CTF 2012. Maaf jika ada kekurangan dari pihak kami. Kami juga ingin mengucapkan terima kasih kepada pensyarah CTN terutamanya Puan Norkushaini dan Dr Fakariah atas sokongan mereka, juga tak lupa kepada brader-brader lab, Encik Asyraf, Encik Jamal dan rakan2 serta kak Salmah, kerena memberikan kami kepercayaan untuk menggunakan makmal di FSKM. Akhir sekali terima kasih kepada Pusat i-Learn yang telah baik hati sponsor operation room dan server-server yang digunakan bagi UiTM-CTF kali ini. Terima kasih.

Akhir sekali disertakan gambar peserta yang mengambil bahagian dalam UiTM-CTF 2012, you guys rock!

2 Comments

5 Kesilapan besar yang selalu dibuat oleh pelajar latihan praktik semasa membuat sistem

Betul, tajuk entri ni memang panjang … tapi aku bimbang, kalau tajuknya pendek dan ringkas mahupun padat, ada yang tidak paham tentang betapa pentingnya entri kali ini.

Semalam, aku telah pergi melawat seorang pelajar Diploma Sains Komputer (CS10) yang sedang menjalani latihan praktik disebuah syarikat terkemuka tanah air. Seperti biasa, pelajar-pelajar latihan praktik akan diberikan tugasan untuk membuat sistem. Biasanya sistem ini mudah dan scope penggunaannya adalah pada tahap departmental level sahaja. Cuba baca semula ayat sebelum ini, sistem mudah, sistem mudah selalunya cuma memerlukan pelajar menukar flow daripada menggunakan cara manual ( iaitu mengisi borang menggunakan kertas) kepada online. Jadi kebiasaannya pelajar akan diberi borang, dan diminta untuk implement borang ini secara online. Ini adalah sistem mudah, pelajar sepatutnya boleh menyiapkan tugasan ini kurang daripada masa seminggu. (No I am not kidding!). Tetapi, sudah beberapa kali pelajar masih belum berjaya menyiapkan sistem apabila pensyarah datang melawat, dan selalunya pensyarah datang seminggu dua sebelum latihan praktik tamat! Macam mana ni?

A simple system and yet students fail to complete it in a semester! A semester is 4 months ok! 4 months! Kalau sistem mudah pun 4 bulan tak boleh siap, macam mana company nak trust pelajar dengan sistem lain yang lebih kompleks? Arrghh …. (tambah kata-kata yang tidak boleh diucapkan di sini).

Tapi tak per, sebagai seorang yang berpkiran positif, aku rasa ini semua boleh berubah, dan aku harap dengan memberitahu pelajar tentang 5 dont‘s ini akan membantu mereka untuk lebih berjaya pada latihan praktik akan datang, jadi tunggu apa lagi, mari kita lihat kesalahan yang selalu sangat pelajar lakukan. Ayoh!

1. Suka mengasing-asingkan user mengikut nafsu

Ini adalah kesilapan besar yang banyak pelajar lakukan, apabila membuat sistem, dan sistem tersebut memerlukan user authentication (user perlu login untuk menggunakan sistem), pelajar akan membuat table user yang berbeza untuk setiap group yang ada didalam syarikat tersebut. Tak paham ek? Memanglah, sebab tu salah buat! Hahaha … tengok contoh ni dan jangan buat kesilapan yang sama!

Katakan syarikat ada department berikut:

  • Finance
  • Human Resource
  • Marketing
  • Research and Development, dan
  • Technical

Biasanya pelajar akan membuat 5 table user untuk setiap department diatas. Jadi kita akan ada table user_finance, yang simpan data authentication tentang staff di finance. Kemudian kita ada table user_hr, yang simpan data tentang staff di human resource and so on. Kenapa? Why? Why do you have to hurt my heart dey? Apa reasoningnya untuk kita ada different table of user for each department? Bukankah table user ini mempunyai field yang sama? Arrghh …. (tambah lagi kata-kata yang tidak boleh diucapkan di sini).

Cuba bayangkan kalau ada 20 department

Masalah user dibahagikan kepada banyak table ini pulak, akan menyebabkan pelajar membuat different login page untuk setiap department. Maknanya nanti staff finance akan login menggunakan page sendiri, staff Marketing ada page login sendiri dan begitu juga staf technical. Pelik tak? Cuba kalau nak akses facebook, kita ada different login page untuk user dari Malaysia, user dari Canada dan user dari Congo, pelik tak? Pelik kan? Habis tu kenapa korang buat haaaa ?

Lepas tu nanti, kalau nak buat profile page, akan ada different update profile page untuk setiap department, page nak update password pun berbeza untuk setiap department, dan hampir semua page berbezalah untuk setiap department. Nampak tak masalah yang akan timbui jika kita mula dengan database design yang salah?

Jadi ingatlah wahai adik-adik, secara general, data mengenai user cuma disimpan didalam satu table sahaja melainkan kes kes tertentu, dan sistem mudah tidak termasuk dalam kes kes tertentu ini. ok?

2. Login hanya untuk suka-suka

Biasanya semasa presentation, ini yang terjadi. (Nama watak adalah rekaan semata-mata yer.)

Mila Amylia: (Dengan slang omputeh + utara) Ok so now I would like to demo the system that I have developed in the company. When user would like to use the system. they have to login first.

Pelajar dengan yakin membuka browser pilihan hati, membuka sistem dengan gaya vogue dan apabila login screen dipaparkan, dengan lagak Hugh Jackman dalam cerita Swordfish memasukkan username dan password. Apabila next screen appear, pelajar dengan tersenyum lebar menunggu pujian dari para panel kerana telah berjaya membuat authentication.

Encik Ali Federer: Nice, can you logout please Mila!

Pelajar dengan blur klik butang logout tapi tak paham kenapa disuruh berbuat demikian.

Encik Ali Federer: So you have logged out right?

Mila Amylia: Betul Harris, eh silap, En Ali.

Encik Ali Federer: Now press the back button, if your authentication is correct, your system should not allow you to access the system right?

Mila Amylia: Yeah I think so.

Pelajar pun klik butang back, and suprisingly (actually tak suprise dah pun), masih boleh access the so-called secure page. Nanda Kore?

Pelajar pun dengan muka terkejut tak paham kenapa jadi macam tu.

Mila Amylia: Sorry sir, I dont know what happen, saya pasrah …

Encik Ali Federer: Yer lah tu, continue with your demo please.

Mila Amylia: (Tiba-tiba menyanyi) Tuhan tolong lembutkan hati dia, untuk terimaku, seaadanya ….

Senario diatas memang biasa terjadi, pelajar tidak paham cara yang betul untuk membuat authentication. Jadi please, next time learn how to do proper authentication!

3. Tidak mendalami lirik lagu Peter Pan – Di Atas Normal

Betul … Ini adalah satu lagi perkara yang sangat penting tetapi tidak dilakukan oleh pelajar iaitu membuat normalization semasa merekabentuk database. Saya pernah melihat pelajar yang berjaya menyiapkan satu sistem dengan hanya menggunakan satu table sahaja, yerp … satu table. Dan didalam satu table inilah data mengenai authentication di simpan, data mengenai cuti dan sebagainya juga disimpan.

Memang, sistem anda pada masa ini tidak mengalami apa-apa masalah dan anda mungkin boleh present dengan jayanya, tetapi ini tidak sihat untuk kerjaya anda kerana bila pada masa bekerja nanti dan anda diminta untuk membuat sistem, anda akan pecah kepala bila data corruption berlaku pada database anda, percayalah.

Dan pada masa itu kita akan sama-sama menyanyikan lagu peter pan:

Pikiranku
Tak dapat kumengerti
Kaki dikepala
Kepala dikaki
Pikiranku
Patutnya menyadari
Data yang mana
Yang sudah ku normali (boleh eh?)

Jadi sebelum ini terjadi, tolong baca dan pahamkan normalization, boleh?

4. Menggunakan Dreamweaver

Sebelum ada yang hantar komen memaki dan marah-marah bila baca tajuk diatas, aku rasa baik korang baca dulu entri ni sampai habis ok. Aku takde masalah dengan Dreamweaver malah aku akui dreamweaver adalah satu IDE yang amat bagus, malah aku juga dulu, masa mula-mula belajar PHP dan mula berjinak-jinak dengan seni membuat laman web, aku juga menggunakan Dreamweaver. Oleh kerana itulah aku ingin memberikan nasihat ini.

Didalam pembelajaran tak kira apa pun, kita mesti bermula dari bawah supaya kita mempunyai asas yang kuat. Sebagai contoh, dalam membuat laman web, walaupun Dreamweaver boleh membantu kita untuk design laman web kita, tetapi kita perlu tahu segala bala tag yang ada yang digunakan dalam HTML. Kalau tidak nanti, bila ada dreamweaver, kita dapat membuat drop down box dengan mudah, tetapi bila kita kerja dan syarikat tersebut menggunakan hanya notepad++, baru kita mula panik dan ingin belajar cara membuat drop down box menggunakan HTML code.

Lebih teruk lagi jika kita menggunakan bantuan Dreamweaver untuk generate PHP code untuk kita, memang serabut jadinya kerana kita tak paham PHP, tapi buat web guna PHP. Nanti bila client mintak requirement yang pelik-pelik, kita dah panik ….

Jadi adik-adik, bila ada assignment web development, tolonglah download notepad++ atau pun apa-apa yang seangkatan dengannya, bila anda sudah pro, barulah guna Dreamweaver, boleh kan?

5. Menganggap ianya sebagai satu lagi subjek yang perlu dilalui

Kesilapan terakhir yang sering pelajar lakukan tidak ada kena mengena langsung dengan komputer tapi lebih kepada mentaliti mereka semasa menjalani latihan praktik. Kebanyakan pelajar yang aku lihat cuma mahukan mereka diluluskan oleh panel mereka semasa sesi pembentangan. Mereka cuma menganggap latihan praktik adalah just another course yang mereka perlu habiskan semata-mata untuk grad.

This is a wrong mentality, seriously guys you need to change.

Sepatutnya korang semua ambil peluang semasa praktikal ini untuk menimba ilmu sebanyak mungkin, menunjukkan betapa hebatnya korang semua dan betapa pelajar UiTM sebenarnya adalah pelajar-pelajar yang bagus dan boleh membuat kerja. Ingat, anda semua adalah duta-duta UiTM, sekiranya anda bersikap sambil lewa semasa latihan praktik, ini akan memberikan persepsi tidak baik kepada syarikat-syarikat yang mengambil anda bukan? Mungkin selepas ini mereka akan melabel pelajar UiTM yang bukan-bukan kan?

Jadi marilah kita sama-sama berubah agar masyarakat diluar sana akan mempuyai rasa hormat yang tinggi kepada mahasiswa lepasan UiTM, boleh yer?

Ok lah aku pun dah penat … semoga berguna untuk semua!

20 Comments

Salah satu cara membuat cake yang betul

Haha … lama dah tak update blog ni, tapi kali ini agak critical sikit sebab ada beberapa pelajar yang memerlukan bantuan untuk bake cake didalam CakePHP. Jadi adik adik, ini salah satu cara yang betul untuk membuat scaffolding.

STEP 1: Pastikan CakePHP telah didownload, diinstall dan diconfigure dengan betul. Anda semua adalah pelajar2 degree, jadi tak perlu saya ajar bagaimanakah cara memegang mouse yang betul, kan? Kalau semuanya sudah dibuat dengan betul, anda patut dapat page yang penuh dengar jalur hijau seperti ini.

Successful Installation of CakePHP

Cantik sangat kan? Rasa macam nak update Facebook status kerana terlalu gembira!

STEP 2: Siapkan segala table dan field-field yang diperlukan bagi database. Ini penting, untuk scaffolding, sekurang-kurangnya database perlulah berada dalam keadaan siap sempurna dan mantap beb! Contoh database yang dah siap macam ni. ( credit to student yang bertanyakan soalan ini).

Database with all the tables created.

STEP 3: Jadi bila dah bertapa selama beberapa bulan dan janggut pun dah panjang, baru lah boleh kita mula menggunakan bake. Tak perlulah kita cerita panjang tentang fungsi bake ini yer sebab untuk itu anda semua boleh menggunakan google yang hebat. Oh lupa … ada satu lagi step yang anda perlukan. Bagi setiap table, anda perlu create satu file model bagi table tersebut. Sebagai contoh, pada database cakecms diatas ada table bernama posts. ( Didalam CakePHP, nama tables mesti dalam bentuk plural, walaupun ada masih single dan available.). Jadi anda perlu create file model bagi table tersebut.

Masuk ke dalam folder app, kemudian folder model dan create satu file bernama Post.php. Ingat pesan datuk harimau, walaupun nama database adalah plural, tetapi nama Model beserta dengan nama file mesti dalam bentuk singular. Ini adalah ketentuan jadi jangan banyak tanya dan buat saja, hahaha. Didalam file tersebut perlu ada coding ini:

Every table needs to model by its own model file, like so.

Simple bukan, file Post.php cuma perlu ada nama kelas, dan variable $name yang bagitahu cake nama table tersebut didalam DB adalah posts. Sekali lagi diingatkan, file ini terletak didalam /App/Model/Post.php. Jadi kita perlu buat file model bagi semua table yang ada, sebagai contoh, database cakecms diatas perlu ada file PostTag.php, Status.php dan Tag didalam folder model.

STEP 4: Selepas memberitahu CakePHP model-model yang ada, boleh lah kita mula membake. Buka terminal, console, command prompt atau apa-apa saja yang benarkan anda untuk execute command. Masuk ke dalam folder app. Kemudian run command berikut, php -f … haha malas lah nak taip, tengok je la gambar ni.

Cake Console

Perasan tak dekat atas, kita duduk dalam folder app semasa kita run bake. Ini penting, seperti pentingnya untuk kita menarik nafas, penting untuk kita pastikan kita berada dalam folder app semasa execute command bake. Dan kalau kita execute dengan betul, kita akan dapat paparan seperti diatas.

Wah banyaknya pilihan, nak pilih yang mana yer? Sabar anak muda …. tak perlu gopoh.

Memandangkan kita telah pun create file untuk model, langkah seterusnya adalah kita perlu create file controller. Jadi pilih C untuk controller, dan pilih default database. Sepatutnya kita akan dapat list of possible controllers based on Model yang kita dah buat. Sebagai contoh kita akan bake controller untuk Posts dulu, jadi tekan 1. Kemudian tekan butang hash untuk mendapatkan baki terkini prepaid, hahaha …

Baik, tekan 1, macam dalam gambar ni.

Mari kita bake controller

Kemudian ikut langkah berikut, malas nak taip … orang putih kata picture is better than a thousand words …

Controller akan dibuatkan oleh bake

Haha sekejap je dah siap file controller, best tak? Jadi sekarang ini kita cuma perlu repeat untuk model2 yang lain. Tunggu apa lagi, pergilah buat …..

STEP Err .. SETERUSNYA: Haha .. lost count, anyway CakePHP adalah berdasarkan arkitektur Model-View-Controller (MVC) jadi kita sudah ada model, kita sudah ada controller, jadi yang kita tidak ada adalah view, jom kita bake view. Seperti biasa, ikut je gambar ni, kalau kecik klik la kasi besar, takkan itu pun nak ajar kot …. Siapa PA ko ni haa ? Hahaha ….

Gambar terakhir untuk posting ni.

Alhamdulillah jadi kita sudah berjaya bake both controller dan view. Quit bake dan cubalah akses application anda di http://127.0.0.1/posts dan rasailah kehebatan CakePHP. Yeeaahh!

No Comments

Masalah “PHP Warning: strtotime(): … ” pada CakePHP

Baru-baru ini aku telah pun menginstal CakePHP versi 1.2.6 keatas Mac Book Pro aku. Selepas dinaik taraf ke Snow Leopard, versi PHP didalam MB Pro ini juga telah menjadi PHP versi 5.3. Sebelum ini aku memang tidak mempunyai masalah dengan instalasi CakePHP ke atas Mac OS, tapi kali ni bila aku akses muka depan untuk CakePHP, dia keluar error yang macam ni:

Warning: strtotime() [http://php.net/function.strtotime]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Kuala_Lumpur’ for ‘MYT/8.0/no DST’ instead in …… cake/libs/cache.php on line 429

Di setiap muka surat pulak tu, memang serabut dan mengganggu rekabentuk laman sesawang. Untuk membuang error ini, caranya adalah dengan mengubah fail php.ini. ( Di dalam Mac OS X, fail ini berada di /etc/ )

Cari baris berikut:

; date.timezone =

Dan tukarkan kepada:

date.timezone = “Asia/Kuala_Lumpur”

Restart semula apache dan error tersebut sepatutnya sudah tiada, AlhamduliLlah!

1 Comment

Apabila sudo echo “blah” > /root/blah memberi error permission denied

Kadangkala semasa membuat bash script, kita perlu mengisi sesuatu file dengan perkataan atau ayat. Oleh kerana file itu hanya boleh ditulis oleh superuser, kita pun menjalankan arahan berikut:

sudo echo “blah” > /root/blah

Tetapi kita akan menerima error permission denied bila menjalankan arahan diatas. Kenapa ek?

Jawapannya mudah … sudo hanya boleh digunakan oleh arahan yang pertama sahaja e.g. echo, ianya tidak dibawa oleh redirection untuk menulis kedalam file. Untuk mengatasi masalah diatas kita boleh guna arahan tee seperti berikut:

echo “blah” | sudo tee -a /root/blah

-a bermaksud append ke dalam file dan bukan overwrite data di dalam file.

No Comments

Instalasi Apache dan PHP 4 atas Ubuntu

Pada posting kali ini kita akan lihat bagaimanakah cara untuk menginstal Apache dan PHP 4 di atas Ubuntu Linux. Versi yang digunakan ialah Ubuntu 7.10 tetapi langkah-langkah ini juga boleh digunakan keatas versi Ubuntu yang lain.

Kenapa PHP4? Tidak PHP5?

Bagus soalan tu. Walau pun PHP4 sudah tidak disupport lagi. Tetapi kadangkala masih ada legacy sistem yang cuma boleh beroperasi dengan menggunakan PHP4. Untuk mengubah kod punca (source code) sistem ini mungkin mengambil masa yang lama, jadi nak tak nak, kita guna je lah PHP4, boleh? Contoh salah satu sistem yang cuma boleh run di atas PHP4 adalam sistem i-Learn.

Ok, cukup dengan bebelan, macam mana nak instal ?

Sebelum instal, adalah digalakkan untuk kita mengupdate repository apt dan mengupgrade perisian-perisian yang telah ada didalam Ubuntu. Larikan arahan berikut pada terminal.

sudo apt-get update

sudo apt-get upgrade

Selesai update dan upgrade, kita instal apache dengan melarikan arahan berikut:

sudo apt-get install apache2 libapache2-mod-rpaf libapache2-mod-auth-mysql apache2-threaded-dev

Sedikit penjelasan tentang arahan diatas. Ianya akan menginstal 4 package.

  1. apache2
  2. libapache2-mod-rpaf : Ini adalah modul yang diperlukan untuk menerima IP sebenar daripada nginx ( hanya instal jika anda menggunakan nginx sebagai load balancer)
  3. libapache2-mod-auth-mysql : Modul yang diperlukan oleh apache untuk berkomunikasi dengan MySQL ( juga hanya install jika apache ada perlu membuat connection dengan MySQL Server)
  4. apache2-threaded-dev : Package ini diperlukan untuk kompilasi PHP4

Untuk pastikan samaada Apache telah diinstal, jalankan arahan berikut:

netstat -an | grep :80

Jika tiada masalah, anda sepatutnya mendapat paparan seperti dibawah.

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN

Atau pun, cara yang lebih mudah untuk pastikan Apache telah diinstal adalah dengan membuka pelayan web e.g. Internet Explorer dan layari IP address komputer anda. e.g. http://127.0.0.1 untuk localhost. Jika anda mendapat paparan “index of / page”, itu bermakna Apache telah diinstal dengan jayanya. Yeahoo … !

Jom kompil PHP4!

Selepas instalasi Apache berjaya, barulah kita boleh mula menginstal PHP. Ada beberapa package yang perlu diinstall, tak perlu tanya banyak, jalankan saja arahan dibawah ini.

sudo apt-get install gcc

sudo apt-get install make

sudo apt-get install bison

sudo apt-get install flex

Selepas selesai proses diatas, muat turun versi terbaru PHP4 iaitu versi 4.4.9. Guna la apa2 tools yang korang suka, aku downoad guna wget.

wget http://my.php.net/distributions/php-4.4.9.tar.gz

Untar kan fail yang baru di muat turun dan masuk ke dalam direktori php hasil dari tar.

tar -zxf php-4.4.9.tar.gz

cd php-4.4.9/

Sebelum kompil kita perlu run skrip configure dahulu. Jika tiada masalah, teruskan dengan arahan make dan make install.

./configure –with-apxs2=/usr/bin/apxs2 –with-mysql –with-zlib –enable-fastcgi

make

sudo make install

Arahan terakhir diatas akan berhenti disebabkan satu error berkaitan dengan LoadModule seperti dibawah:

notice: problem with “At least one ‘LoadModule’ directive already has to exist

Cara untuk membuang error ni sangat mudah, edit fail /etc/apache2/httpd.conf:

sudo nano /etc/apache2/httpd.conf

dan tambahkan maklumat berikut:

#LoadModule foo_module /usr/lib/apache2/modules/foo.so

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Jalankan semula arahan make install. Kita sepatutnya berjaya menghabiskan arahan make install tanpa masalah.

sudo make install

Untuk periksa samada PHP telah diinstal dengan betul, edit fail php.ini. Tambahkan path /usr/local/lib/php kepada directive include_path.

Kemudian masuk kedalam folder DocumentRoot (selalunya /var/www) dan buat satu fail bernama info.php.

cd /var/www

sudo nano info.php

Didalam fail tersebut, taipkan kod berikut:

<?php

phpinfo();

?>

Bunuh dan hidupkan semula Apache dengan menjalankan arahan dibawah.

/etc/init.d/apache2 stop

/etc/init.d/apache2 start

Akhir sekali, buka URL http://127.0.0.1/info.php menggunakan pelayar web. Jika anda mendapat laman muka yang mengandungi informasi tetang PHP, tahniah! Kerana anda telah berjaya menginstal Apache dan PHP4.

No Comments

Masalah NFS selepas update terbaru pada Ubuntu Hardy Heron

Seperti biasa setiap hari aku akan run command:

sudo apt-get update
sudo apt-get upgrade

untuk memastikan perisian-perisian didalam server berada dalam keadaan terkini. Tetapi last few weeks aku ada masalah dengan NFS kerana gagal untuk mount folder pada NFS server. Ini adalah masalah yang sangat besar (sebesar masalah parking di parking bertingkat menara ) kerana kebanyakan data-data pelajar adalah disimpan pada NFS server. Berikut adalah error yang dikeluarkan apabila percubaan mount dilakukan.

$ sudo mount -a
mount.nfs: internal error

Setelah mengoogle sana-sini rupanya bukan aku seorang sahaja yang berhadapan dengan masalah yang serupa, sila baca penyelesaian tentang masalah NFS Hardy dan masalah dalaman NFS Client Hardy Heron untuk mengetahu lebih lanjut tentang masalah ini.

Jalan penyelesaiannya, sila ikut langkah-langkah ini:

1. Dapatkan patch di http://launchpadlibrarian.net/14961727/nfs-common_1.1.2-2ubuntu2.1_amd64.deb. Cara mudah adalah menggunakan wget. By the way package diatas adalah untuk sistem AMD64, sila dapatkan package bagi version i386 jika korang guna sistem i386.

wget http://launchpadlibrarian.net/14961727/nfs-common_1.1.2-2ubuntu2.1_amd64.deb

2. Kemudian jalankan perintah berikut:

sudo dpkg -i nfs-common_1.1.2-2ubuntu2.1_amd64.deb

Jika proses diatas berhenti kerana error tentang ketiadaan package portmap dan rpcbind, sila install portmap dengan arahan: sudo apt-get install portmap. Run semula command diatas.

3. Kemudian cuba run semula perintah mount

mount -a

Korang sepatutnya sudah boleh mount dengan jayanya, hurray …

BTW, as of now, 30th August 2008, mungkin korang boleh cuba remove package nfs-common dan reinstall kembali package tersebut, that might also works. May be …

No Comments

Langkah-langkah untuk display foreign character pada Apache

Kejap2 aku nak tanya dulu, foreign character tu apa?

Huhuhu sungguh gelojoh dirimu ini wahai sahabat, tapi takpe, oleh kerana ko dahagakan ilmu aku bagi jawapannya. Katakan kita ada satu website, selalunya website kita akan display character-character roman macam a b c dan adik2nya. Tapi, what if website kita ni perlu pulak display character-character lain macam character jepun ke, cina ke or bahasa Jawi? Itu la namanya foreign character dan kita perlu buat sesuatu sebelum web server kita boleh display aksara-aksara tersebut, contohnya ayat2 ini:

我叫莫哈末阿里,你呢?

اڤ كابر سموا

lǎo shī

Tak guna hurup roman kan? Dan ko pun tak boleh baca ….hahaha … tapi ada orang boleh baca ok? So kita perlu enable kan support ini pada webserver kita.

Kenapa ko ni baik sangat? Kalau aku, aku tak peduli …

Peduli atau tidak … pengguna sistem aku ada yang perlukan ciri ini. Jadi di bawah ini aku sertakan langkah-langkah untuk enablekan foreign character pada pelayan web.

Langkah 1: Setting pada Apache

Edit /etc/apache2/apache2.conf dan tambahkan ayat dibawah dihujung file.

AddDefaultCharset UTF-8

sudo echo “AddDefaultCharset UTF-8” >> /etc/apache2/apache2.conf

Langkah 2: Restart Apache

sudo /etc/init.d/apache2 restart

Langkah 1 dan 2 cuma bagitahu pada apache untuk display semua huruf menggunakan encoding UTF-8. Ini adalah memadai jika korang semua tidak menyimpan data/content di dalam database. Kalau ada database macam MySQL, sila sambung ke langkah seterusnya.

Bila kita menyimpan data di dalam database, kita perlu putuskan data ini disimpan mengunakan encoding apa. Ada banyak jenis encoding, tapi kalau korang nak display foreign character, MySQL perlu simpan data menggunakan encoding UTF-8. Jadi macam mana nak set? Folooo ….

Langkah 3: Setting pada MySQL

Edit file /etc/mysql/my.cnf dan insertkan ayat berikut pada section [client]

default-character-set = utf8

aku letak aku punya betul2 selepas option socket = /var/run/….

Langkah 4: Masih lagi setting pada MySQL

Edit file yang sama (/etc/mysql/my.cnf) dan insertkan ayat yang berikut pula pada section [mysqld]

default-character-set = utf8
default-collation = utf8_general_ci

Langkah 5: Restart MySQL

sudo /etc/init.d/mysql restart

Jadi selepas langkah2 diatas pelayan web korang semua sepatutnya sudah boleh display foreign character, clap! clap! clap!

Hm … macam mana nak test?

Nak test ek, kalau ko ada mekanisma untuk input kan foreign character, ko cuba je lah taip foreign character dan tengok samaada ianya didisplay atau tidak. Aku just visit website cina and arab (macam aljazeera) copy je perkataan arab kat situ, and then paste dekat aplikasi aku. Then aku submit masuk dalam database and try read balik tgk boleh display ke tidak. Kalau boleh bagitahu kawan, kalau tak boleh ko bagitahu aku, kita cuba solve sama2 …. huhuhu …

Takde disclaimer, kira safe la eh langkah-langkah ni?

Safe la sangat, macam biasa aku tak bertanggungjawab atas korupsi data yang mungkin terjadi keatas data dalam database korang semasa mengikuti langkah-langkah diatas. Aku dah cuba buat, so far tak de problem, jadi untuk keselamatan makhluk sejagat, sila backup database anda sebelum mengikuti langkah diatas, terima kasih.

No Comments

Masalah single-sign on(SSO) google apps selepas upgrade ke Ubuntu Hardy

Pada Januari tahun 2008, i-Learn telah mula menyediakan khidmat emel kepada pelajar. Khidmat ini berjalan lancar walaupun ada beberapa kekangan yang terpaksa dihadapi. Tetapi pada bulan 7, kami terpaksa memindahkan sistem i-Learn ke server yang baru kerana server lama sudah tidak mampu lagi menampung peningkatan storan.

Jadi kebetulan pada ketika itu Ubuntu 8.08 juga telah keluar, aku pun tanpa berpikir panjang telah menginstal server yang baru dengan Ubuntu Server 8.08. Secara overall memang tidak ada masalah dengan versi terbaru Ubuntu ini, apache2 dan mysql5 boleh diinstal dengan mudah dengan menggunakan command sudo apt-get install <apache2/mysql5>. As always …

Masalahnya PHP4 is no logger supported by Hardy, in fact versi terakhir yang support PHP4 adalah edgy. Jadi aku ada dua pilihan, downgradekan balik OS ni ke edgy atau pun aku boleh compile PHP4 secara manual, dan aku telah memilih untuk manually compile PHP4.

PHP4 compile so easily on Hardy and i-Learn seems to run smoothly after the server move. Masalahnya ialah coding untuk single-sign on ke Google berhenti berfungsi after the move. Selepas few hours troubleshooting the problem, aku discover yang masalahya terletak pada coding ini di file sam_util.php

function samlEncodeMessage($msg) {
$encmsg = gzdeflate($msg);
$encmsg = base64_encode($encmsg);
$encmsg = urlencode($encmsg);
return $encmsg;
}

Function diatas akan deflatekan message sebelum disend ke google dan masalahnya ialah, PHP perlu dicompile dengan option –with-zlib kalau tidak function gzdeflate() ini tidak available kepada PHP. Jadi selepas recompile code single-sign on anda berfungsi seperti biasa. InshaALLah.

No Comments