Mengantikan Peran Cookie Authentication

irigster

New member
Date: Sunday, August 28, 2005 Hits: 9155 By: singmbiyen
Pada kesempatan kali ini saya ingin berbagi cerita tentang bagaimana cara kita menggantikan peran cookie sebagai sarana autentifikasi pengguna. Cookie akan kita coba gantikan dengan model session. Seperti kita ketahui bahwa peran cookie dalam dunia internet terutama web sangat penting. Cookie berperan sebagai
penyimpanan data-data yang kecil, sebagai contoh identifikasi pengguna dan lain sebagainya. Tapi apakah kita tahu betapa rawannya penggunaan cookie, apalagi kalau sistem kita mempunyai XSS bug. XSS bug adalah keadaan dimana pengguna bisa memasukan tag-tag html dan secara langsung sistem akan enjalankannya, tetapi saya tidak akan membahasnya di sini. Contoh dari XSS bug dapat kita temui pada web http://www.uad.ac.id/sni2005 (tapi kayaknya sekarang dah diperbaiki).

Untuk kali ini syarat minimum yang harus terpenuhi pada sistem anda adalah:
1. PHP sebagai server-sidenya
2. MySQL sebagi databasenya
3. Untuk anda yang menggunakan windows dan menginstall php sendiri pastikan bahwa sistem anda telah support session

Langkah pertama adalah buat suatu tabel dalam database anda. Dengan menjalankan perintah berikut :

CREATE TABLE `pengguna` (
`username` varchar(255) NOT NULL default '',
`password` varchar(32) binary NOT NULL default '',
`session` varchar(32) binary default NULL,
PRIMARY KEY (`username`)
) TYPE=MyISAM COMMENT='Untuk menyimpan data pengguna';

INSERT INTO `pengguna` VALUES ('admin', 0x3231323332663239376135376135613734333839346130653461383031666333, 0x6261623633356131653632336165336637336335346163366330306361653535);

Sebagai catatan teknik pengiriman password pengguna menggunakan metode yang telah dibahas pada artikel saya yang berjudul "teknik sederhana pengiriman password dengan aman". Akan coba saya jelaskan sedikit tentang tabel tersebut diatas - username, digunakan untuk menyimpan nama pengguna dan nama pengguna akan dibatasi hanya 255 karakter - password, berguna untuk menyipan password pengguna, kita ambil varchar(32) binary karena semua string yang telah diencrypt dengan md5 maka hanya akan mempunyai 32 karakter, dan disini juga dikasih option binary sebenarnya saya tidak tahu alasan pastinya tetapi saya pernah baca suatu artikel yang mengatakan "bahwa akan lebih baik kalau password dan semua data penting disimpan dalam binary".
- session , digunakan untuk menyimpan nilai dari session id pengguna, nilai session pasti akan berupa 32 karakter acak, jadi kita gunakan tipe datanya adalah varchar(32).

Setelah langkah pertama dilakukan maka sekarang kita akan masuk ke langkah kedua, yaitu buatlah satu file dengan nama autent.php yang akan berisi script seperti berikut

1. <?php
2. session_start();
3. include_once("./update.inc.php");
4. include_once("./connection.inc.php");
5.
6. $username=$HTTP_GET_VARS["username"];
7. $passwd=$HTTP_GET_VARS["password"];
8. $sessionid=session_id();
9.
10. $sqlPilihPengguna="select password from pengguna where username='$username' limit 1";
11. $jalankan=mysql_query($sqlPilihPengguna,$link);
12. $hasil=mysql_fetch_row($jalankan);
13.
14. if($hasil[0]!=$passwd) {
15. header("Location:./login.php");
16. exit();
17. } else {
18. $sqlUpdateSession="update pengguna set session='$sessionid' where username='$username' limit 1";
19. $jalankan=mysql_query($sqlUpdateSession,$link);
20. print(mysql_error());
21. if(! $jalankan) {
22. header("Location:./login.php");
23. } else {
24. $_SESSION["penggunaActive"]=$username;
25. header("Location:./admin.php");
26. }
27. }
28.?>

Penjelasan dari script diatas adalah:
- Pada baris 1 dan 28 adalah tag dimana script php berada, atau dengan kata lain awal dan akhir dari script php kita
- Baris 2 beguna untuk memulai session, ini wajib disertakan dan ditulis diatas sendiri adalah agar session tercipta dan kita dapat mengambil session id dari session yang tercipta
- Baris 3 dan 4 hanya untuk menyertakan file lain
- Baris 6 dan 7 digunakan untuk mengambil nilai dari username dan password yang telah dimasukan pada halaman sebelumnya
- Baris 8 beguna untuk mengambil session id dari session yang tercipta, session id yang kita gunakan sebagai pengenal dengan alasan bahwa sessio id akan berbeda-beda pada masing-masing browser
- Baris 10 sampai 12 digunakan untuk mengambil data di mysql pada table pengguna
- Baris 14 digunakan sebagai control flow, jadi jika diketahui password yang dimasukan pengguna sama dengan password yang ada pada database maka program akan menjalankan baris 18 sampai 26, dan jika tidak maka program akan menjalankan baris 15 dan 16 yang artinya kita akan dihantarkan ke halaman login.php
- Jika pasword yang kita masukan benar maka session dari user kita akan diupdate dan diubah nilainya sesuai dengan session id browser kita, selanjutnya kita akan dihantarkan ke halaman admin.php. Tetapi baris penting yang bisa kita anggap sebagai pengganti fungsi cookie ada pada baris 24, dimana kita menyimpan username dari pengguna aktif pada session penggunaSctive yang notabene akan disimpan di server kita, jadi XSS bug sampai saat pengetahuan saya ini tidak akan berjalan.

Selanjutnya langkah ketiga adalah, buatlah file dengan nama admin.php yang berisi script sebagai berikut

1.<?php
2. session_start();
3. include_once("./update.inc.php");
4. include_once("./connection.inc.php");
5. include_once("./correctuser.inc.php");
6.
7. $sessionid=session_id();
8. $penggunaaktif=$_SESSION["penggunaActive"];
9.
10. if(correctuser($penggunaaktif,$sessionid,$link)!=1) {
11. print("Maaf anda tidak bisa menggunakan system ini");
12. exit();
13. } else {
14. print("Anda terdaftar sebagai = $penggunaaktif >> <a href=\"./logout.php\">logout</a>");
15. }
16.?>

Penjelasan dari script diatas adalah
- Baris 1 sampai 16 tidak akan saya bahas kecuali baris 8, dan 10
- Baris 8 berguna untuk mengambil data penggunaActive yang disimpan pada session dan nilainya akan dimasukan ke variable pengguna
- Baris 10 adalah baris terpenting dari halaman ini, baris 10 menjalankan fungsi correctuser yang berguna mengecek status
pengguna aktif apakah valid atau tidak sebagai pengguna.
Saya rasa sekian dulu dari saya.

Terima kasih untuk
- Teman-teman di informatika UAD, KSL UAD, OSRG, Komunitas symbian programming dan java programming UAD
- Pak dani, Ph03n1X, dan semuanya yang ada di jasakom.com
Source: JASAKOM Information Center
 
pak moderator tolongin aku bikin program pake delphi dong.... tentang sistem informasi penjualan..:) dah mentox niy....khususnya untuk reportnya... gimana ngeprintnya, set up print nya...????? tolong dong.... sapa tau disini aku dpt yang lbh simple dr buku yang dah aku beli, jujur aku tu malah bingung kalo bc buku... simple mana sih antara delphi 6.0 ma delphi 7.0??? waktuku mepet jg niy... kalo skripsiku ga kelar kelar kpn lulusnya??? trus kpn kawinnya...????:) tolong ya pak moderator...plissss......
 
Back
Top