Membina Two-Factor Authentication (2FA) Dalam Sistem PHP Menggunakan Google Authenticator

google-authenticator3Kita biasa login ke sistem di web mengguna username dan password. Dan kalau kita menggunakan aplikasi perbankan, sebagai tambahan kita perlu menggunakan kod TAC yang hadir dalam telefon melalui SMS.

Kalau kita biasa, mungkin ada website lain yang kita gunakan juga meminta kod khas yang hanya boleh didapati daripada telefon kita.

Ini semua dipanggil Two-Factor Authentication atau 2FA. Saya baru-baru ini mengaktifkan ciri-ciri 2FA untuk mengakses panel Amazon Web Service (AWS) syarikat. Amazon menggunakan aplikasi Google Authenticator untuk ini. Setelah aplikasi dipasang di telefon, kita boleh membuat tetapan khas bersama dengan AWS supaya boleh menggunakan 2FA.

Sekarang, apabila perlu login ke AWS, saya perlu nyatakan username, password dan kod khas yang saya boleh dapati daripada aplikasi Google Authenticator di telefon.

Sebenarnya kita juga boleh membangunkan sistem dan menggunakan Google Authenticator untuk pengguna-pengguna sistem kita.

Aplikasi Mobail Google Authenticator

Google Authenticator adalah aplikasi mobail yang boleh dimuat-turun kepada telefon pintar iOS, Android dan Windows. Kita boleh dapati aplikasi ini dari pautan di bawah:

Android
https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2

iOS (iPhone dan iPad)
https://itunes.apple.com/my/app/google-authenticator/id388497605?mt=8

Windows Phone
http://www.windowsphone.com/en-us/store/app/authenticator/021dd79f-0598-e011-986b-78e7d1fa76f8

Dengan aplikasi ini, pertama sekali yang kita perlu lakukan bersama pengguna adalah menyelaraskan kekunci khas yang digunakan untuk menjana nombor rawak unuk login kelak.

Apabila kita mengaktifkan ciri 2FA dengan pengguna, apa yang kita lakukan adalah menjana satu kekunci rahsia yang khusus, yang kita kongsi hanya antara pengguna dan sistem kita. Pengguna akan menggunakan aplikasi Google Authenticator untuk menyimpan kekunci tersebut. Dan kita boleh, boleh menggunakan database atau fail. Setiap pengguna akan mempunyai kekunci rahsia yang berbeza.

Bagaimana Google Authenticator Berfungsi?

Menjana nombor rawak untuk 2FA. Saya tak pasti saudara-saudari mengetahui bagaimana nombor rawak dijana. Tetapi, secara amnya, fungsi nombor rawak di dalam komputer pasti menggunakan satu nombor atau data “seed”. Kekunci rahsia yang kita jana tadi adalah “seed” untuk menjana nombor rawak untuk 2FA.

Berasaskan masa dan kekunci rahsia (sebagai seed) tadi, ianya digunakan oleh kedua-dua sistem untuk menjana kod nombor rawak yang digunakan untuk login. Selagi mana kekunci rahsia sama dikongsi oleh kedua-dua aplikasi, nombor rawak yang sama dapat dijana. Inilah yang digunakan untuk mengesahkan identiti pengguna secara 2FA.

google-authenticator4Integrasi Google Authenticator dengan Sistem

Saya ada membangunkan aplikasi demo penggunaan Google Authenticator. Ianya boleh didapati di Github saya.

Aplikasi Demo Google Authenticator oleh Saya
https://github.com/kidino/PHP-Google-Authenticator

Saya perlu beri kredit kepada pembangun library khusus untuk Google Authenticator dengan PHP. Saya dapatinya daripada PHPGansta di sini.

Library Google Authenticator untuk PHP yang saya gunakan
https://github.com/PHPGangsta/GoogleAuthenticator

google-authenticator2

Mungkin elok juga saya nyatakan bahawa kod yang saya hasilkan hanya sekadar mencuba integrasi aplikasi mobile Google Authenticator dengan sistem berasaskan PHP.

Di dalam sistem sebenar, implementasinya mungkin lebih rumit.

  • Kita perlu beri kebebasan kepada pengguna untuk mengguna ataupun tidak menggunakan 2FA.
  • Perlu ada cara reset kembali login 2FA secara manual
  • Perlu ada cara untuk reset kembali login 2FA dalam keadaan mana pengguna kehilangan telefon atau rosak
  • Perlu kaedah menyimpan secret key pengguna dengan lebih selamat, di dalam database barangkali (contoh saya hanya menggunakan fail teks)

Selamat mencuba…

 

 

Programmer Dad

Mior Muhammad Zaki, work-from-home daddy programmer
Mior Muhammad Zaki, work-from-home daddy programmer. Lead developer of Katsana.com, GPS tracking solution, Laravel contributing programmer and creator of Orchestra Platform.

Mior is a friend I know from JOMWEB.my. He works from home for Katsana.com, a GPS tracking solution in Malaysia. One the side, he is one of the contributors for the Laravel PHP framework. Mior also created, open sourced and maintains Orchestra Platform, an application framework that runs on top of Laravel.

Skim Cepat Kaya Mobile Apps

mobile-games-blogpost

Lewat ni ada bengkel dan seminar yang mengajar cara membina mobile app dan menjana duit. Bengkel atau seminar yang dianjurkan itu mungkin free atau berbayar, dan kemudian menjual pula pakej latihan beharga beribu-ribu ringgit dengan menjual impian membina empayar bisnes mobile apps. Kemudian dijual pula “platform” untuk membina mobile app yang perlu diperbaharui dalam harga ribuan ringgit setahun.

Secara amnya saya mula memahami modus operandi mereka. Ianya tidak jauh bezanya dengan bengkel dan seminar yang menjual latihan untuk membina blog dan menjana duit dengan Adsense tidak lama dulu. Continue reading Skim Cepat Kaya Mobile Apps

Interview with Dispatch Bot’s CTO, Brad Seefeld

dispatchbot

I am fortunate that the people at DispatchBot is nice enough to entertain my request. Their CTO, Brad Seefeld and I went back and forth a few times in email for this. I haven’t had the time to translate this in Malay. So here it is, my interview with Brad, in English…

Perhaps I will translate this to Malay later, or if I get myself a volunteer. 🙂

1 – Can you tell me about your background as in school, education, professional training?

I graduated with a Bachelors in Software Engineering from the University of Washington in 2009. Throughout school I did freelancing for some fairly basic web applications and e-commerce websites. After undergrad, I started working for a financial risk management company. I also applied to grad school and received my masters in Software Engineering in 2012. It was an evening program so I was able to work and go to school at the same time.

scheduler

2 – Can you tell me about your previous career before working on DispatchBot?

Continue reading Interview with Dispatch Bot’s CTO, Brad Seefeld

Cabaran Web CSS Layout di JOMWEB dengan Hadiah Ratusan Ringgit

css-codeIanya bermula secara suka-suka. Tetapi nampaknya macam semakin serius. Beberapa rakan-rakan menawar diri untuk menjadi penaja. Dan cubaan saya menghubungi beberapa pihak nampaknya berhasil apabila JetBrains bersetuju menaja lesen versi peribadi untuk PhpStorm bagi pemenang.

Apa yang berlaku adalah di mana JOMWEB sedang menganjurkan sebuah pertandingan di mana developer yang ingin turut serta perlu membangunkan satu laman dengan hanya HTML dan CSS. Gambar dan Javascript tidak dibenarkan.

Setakat ini saya sudah menerima beberapa penyertaan. Malah ada pihak yang menaja, yang tidak boleh memenangi hadiah juga berminat untuk menayangkan kemahiran.

Kenapa pertandingan ini dilakukan? Secara amnya saya suka mengetengahkan pakar-pakar tempatan dan kemahiran mereka. Saya juga suka melihat kebolehan dan kehebatan orang-orang Malaysia. Dan apabila pakar-pakar ini dikenalpasti, ini juga menjadi peluang agar kita semua boleh belajar sesama sendiri.

Sekiranya anda berkemahiran dalam HTML dan CSS, maka ini peluang untuk anda menunjukkan kemahiran. Malah anda mungkin memenangi hadiah yang ditawarkan, bernilai ratusan ringgit (ya, budget ciput… tapi syukur dan terima kasih kepada penaja).

http://jomweb.my/cabaran-css.html ]

Bagaimana Menambah Domain Baru Di DigitalOcean.com

Web ini sememangnya menggunakan DigitalOcean.com. Bagi yang masih baru dengan cloud hosting dan server berasaskan Ubuntu, mungkin masih tertanya-tanya bagaimana untuk menambah domain ke droplet baru. Satu droplet boleh digunakan untuk lebih daripada satu domain.

Untuk langkah-langkah seterusnya, saya andaikan yang awak sudah ada akaun di DigitalOcean, maka awak sudah mempunyai sekurang-kurangnya satu droplet.

1 – Beli Domain (saya guna GoDaddy)

Kita boleh beli domain dengan mana-mana sahaja pendaftar (registrar) domain, Namecheap, Godaddy ataupun mana-mana pendaftar di Malaysia. Kita boleh gunakan domain .com, .com.my atau apa-apa sahaja. Yang penting kita boleh setkan Nameserver nanti,. Dalam contoh yang ini, saya gunakan Godadddy.

Continue reading Bagaimana Menambah Domain Baru Di DigitalOcean.com

Codeigniter dengan Admin Panel dan Pembangunan Bermodul

Codeigniter pada dasarnya sudah pun sebuah kerangka PHP yang cukup mantap. Ianya mudah dipelajari dan banyak memudahkan proses pembangunan PHP. Namun bagi mereka yang inginkan ini dipermudahkan selangkah (mungkin 10 langkah) lagi, mereka boleh pertimbangkan penyelesaian ini.

Bayangkan Codeigniter digabungkan dengan antaramuka yang cantik, lengkap dengan ciri-ciri login, logout, lupa-katalaluan dan pengurusan pengguna. Malah juga memudahkan pembangunan dengan pengurusan modul aplikasi.

Dengan asas sistem bermodul, sesebuah modul boleh ditambah atau dibuang mengikut keperluan. Malah di masa hadapan, kita boleh membangunkan modul baru tanpa mengusik kod asas aplikasi.

Untuk Codeigniter, saya jumpa beberapa library dan kerangka yang boleh membantu di dalam proses ini. Berikut adalah hasil yang saya jumpa.

Continue reading Codeigniter dengan Admin Panel dan Pembangunan Bermodul