March 3, 2009

How Secure is Secure?

Beberapa hari yang lalu.. di Redmine gw ada tiket yang berjudul "Bug - user can change other user's password" dengan diberi label merah alias high priority..
kaget ajalah gw.. secara di descriptionnya dibilangin klo user juga bisa ngerubah passwordnya admin (doh)
klo ini hole segede gaban ketauan sama user.. matilah gw T_T
bisa2 gw dituduh sengaja menciptakan hole untuk nge-hack ini situs pemerintahan..

padahal ini emang kelalaian gw (cupu mode on)
gw ga ngeh klo conttroller yang bakal dicegat sama login page itu hanya yang diawali dengan /admin, /groupadmin n /private klo gw ga salah..
selain itu..semua bisa diakses tanpa harus login..

jadi begini ceritanya teman..
gw akan menjelaskan semampu gw dengan bahasa yang tidak technical..
administrator dari system ini bisa menggunakan feature "Reset Password" terhadap user yang dia mau passwordnya diubah..
tapi bukan si admin yang ngerubah tuh password..
si user bakal di kirimin email yang nantinya bakal disuruh nge klik sebuah link yang akan membawa dia ke "Change Password" page..

kira2 linknya begini (tentu saja bukan link yg sebenernya :P)
http://www.e-gov.com/changepassword.do?uid=hana

karena awalnya gw kira klo si user ngeklik itu link diatas bakal dicegat dulu sama login page.. makanya si gwnya nyante2 aja..
ternyata tidak sodara2..
klo si usernya ngerti dikit aja soal link2 kayak gini.. doi tinggal dengan mudah nge-ganti si uid dengan administrator misalnya..
dan tadaaaa... password si admin bakal dengan gampangnya dirubah (doh)

akhirnya gw berpikir untuk meng-encrypt uid nya..
yang uid-nya harusnya "hana" misalnya.. bisa berubah jadi "as670Khnnk67Hjso" setelah di enkripsi..
tapi ternyata itu blom cukup teman..
di sebuah meeting untuk nge-demo-in kerjaan gw..
si bos ngasih gw lecture tentang security kayak beginian.. berasa kuliah 4sks lagi aing T_T

dia bilang metode enkripsi kayak yg gw bikin ga secure.. karena begitu si user bikin 2 account.. dan ngebandingin 2 uid yg dia punya sama hasil enkripsinya.. dia bakal dengan gampang nebak key apa yg gw pake buat meng-enkripsi data..
bener juga sih kata si bos.. hahhh.. dasar cupu.com lah gw T_T

harusnya nih.. kata si bos.. gw ga usah nge-enkripsi tuh uid.. tapi kasih satu parameter misalkan namanya "token" sebagai tiket yang mengesahkan si user untuk mengeksekusi fungsi "change password"..

jadi nanti si link akan berwujud seperti ini..
http://www.e-gov.com/changepassword.do?uid=hana&token=5glsjdbkbjkbJBJKBjbj67

si token ini harusnya diisi oleh beberapa variable yang konstan dan ga konstan.. yang berarti dia berubah setiap dia selesai di eksekusi..
misalnya si token merupakan enkripsi dari uid + user password + current day
uid : doi pastinya konstan donk.. karena satu user uid nya satu aja
user password : ini termasuk variable yg ga konstan.. karena setelah si user tuker password.. otomatis passwordnya berubah donk
current day : ini biar si link expired besoknya.. jadi ga bisa di klik lagi :P

si gw manggut2 doank pas si bos ngejelasin..
ternyata memang pengalaman is de bes teacher men..
hahhh.. saya memang harus blajar lebih banyak (rock)

so.. hari ini gw berkutat sama yg namanya security T_T
ampe ke wc pun si gw masih mikir ini bagusnya digimanain ya..
flownya abis dari sini kmana ya..
gimana biar algoritmanya pendek tapi bener ya..

-sapa suruh jadi programmer-

No comments:

Post a Comment