PEN ERAPAN TEORI SECURE LOGI N

PEN ERAPAN TEORI SECURE LOGI N

Jalankan PHP DESI GNER 2005 klik m enu File - N e w - SQL unt uk m em buat file SQL baru. Kem udian ket ik kode berikut

-- buat database secure_login

-- jika sudah ada hapus

DROP DATABASE IF EXISTS secure_login;

CREATE DATABASE secure_login;

-- aktifkan database secure_login USE secure_login;

-- buat tabel user -- panjang password 32 karena panjang enkripsi MD5 demikian

CREATE TABLE user ( username varchar(16) NOT NULL, password varchar(32) NOT NULL,

PRIMARY KEY (username) ) TYPE ='MyISAM';

-- buat privilege untuk user dengan nama secure -- dan password secure123 untuk database ini

GRANT SELECT , UPDATE , INSERT , DELETE ON secure_login.* TO secure@localhost IDENTIFIED BY 'secure123';

Sim pan pada direkt ori h a r i- 1 5 dengan nam a se cu r e .sql. Eksekusi file ini dari phpMyAdm in at au dari MySQL Monit or. Selanj ut nya kit a akan m em buat file PHP baru klik File - N e w - PH P, lalu ket ik kode berikut

<? php

** Kumpulan Fungsi untuk file secure_login.php ***

// cegah pengaksesan langsung dari browser // isi dari $_SERVER['PHP_SELF'] adalah // /webmaster/Bab4/hari-15/fungsi.php

if ( eregi ( 'fungsi.php' , $_SERVER [ 'PHP_SELF' ])) exit ( 'Error: Akses ditolak' );

// fungsi untuk melakukan koneksi ke MySQL server function konek_db () { // untuk username = secure dan password = secure123 @ $koneksi = mysql_connect ( 'localhost' , 'secure' , 'secure123' ); // jika gagal melakukan koneksi kembalikan false

if (! $koneksi ) return false ; else { // pilih database yang digunakan mysql_select_db ( 'secure_login' ); return true ; } }

// fungsi untuk menfilter karakter function filter_str ( $string ) { $filter = ereg_replace ( '[^a-zA-Z0-9_]' , '' , $string ); return $filter ; }

// fungsi untuk mengenkripsi string dengan MD5 dan membaliknya function balik_md5 ( $string ) { // balik urutan string yang terenkripsi dengan md5() // menggunakan fungsi strrev()

$chiper_text = strrev ( md5 ( $string ) ); return $chiper_text ; }

Sim pan dengan nam a fu n gsi.ph p. Sem ua fungsi diat as saya rasa sudah j elas karena banyak kom ent ar penj elasnya. Unt uk alasan keam anan kit a m encegah pengaksesan file- file konfigurasi secara langsung dari browser.

Pada pengerj aan proyek berskala besar. Tulislah kode anda unt uk sem udah m ungkin dapat dibaca. Jangan t erlalu pelit dalam m em beri j arak at aupun m em beri kom ent ar. I ni akan m em perm udah anda dalam m enangani error.

Buat file PHP baru dengan m engklik File - N e w - PH P, kem udian salin list ing kode berikut

<? php

/******************************************************************* ** Nama File....: secure_login.php ** Penulis......: Rio Astamal ** Tanggal......: 16-10-2005 ** Penjelasan...: untuk mengetes metode MD5 pada sistem login *******************************************************************/

// panggil file fungsi.php include ( 'fungsi.php' );

echo '<p><b>Hanya untuk testing...</b></p>' ;

// dapatkan data fari URL $proses = $_GET [ 'proses' ]; if ( $proses == '' )

$proses = 'form_login' ;

/* Jika koneksi gagal tampilkan pesan */ if (! konek_db ())

exit ( 'Error: Gagal melakukan koneksi ke MySQL server. <br> Cek kembali parameter untuk host, username, dan password!.' );

// tangani setiap proses dengan switch dan case switch ( $proses ) { /*****************/

case 'form_login' : /*****************/

echo '<h2>Form login</h2>' . '<form action="secure_login.php?proses=proses_login" method="post">' . 'Username: <input type="text" name="username"><br>' . 'Password: <input type="password" name="password"><br>' . '<input type="submit" value="LOGIN">' . '</form>' . '<p><a href="secure_login.php?proses=tambah_user">Tambah User</a></p>' ;

break ; /*************/

/*******************/ case 'proses_login' : /*******************/

// daftarkan variabel $username = filter_str ( $_POST [ 'username' ]); $password = filter_str ( $_POST [ 'password' ]);

// enkripsi password $password = balik_md5 ( $password );

// cek kecocokan data dengan yang ada didatabase $hasil = mysql_query ( "SELECT * FROM user WHERE username=' $username ' AND password=' $password '" );

// jika jumlah baris lebih dari nol maka cocok if ( mysql_num_rows ( $hasil ) > 0) {

echo '<p><b>Login Berhasil</b></p>' . '<a href="secure_login.php">Halaman Login</a>' ; } else {

echo '<p><b>Username atau Password salah!</b></p>' . '<a href="secure_login.php">Login Kembali</a>' ; }

break ; /***********/

/******************/ case 'tambah_user' : /******************/

echo '<h2>Tambah User</h2>' . '<form action="secure_login.php?proses=proses_tambah" method="post">' . 'Username: <input type="text" name="username"><br>' . 'Password: <input type="text" name="password"><br>' . '<input type="submit" value="TAMBAH USER">' . '</form>' . '<p><a href="secure_login.php">Halaman Login</a></p>' ;

break ; /*************/

/********************/ case 'proses_tambah' : /********************/

// daftarkan variabel $username = $_POST [ 'username' ]; $password = $_POST [ 'password' ];

// cek apakah data yang dipost mengandung karakter non alpanumerik

foreach ( $_POST as $data )

{ if ( ereg ( '[^a-zA-Z0-9_]' , $data )) exit ( 'Error: username atau password mengandung karakter bukan alpanumerik dan underscore.' ); }

// jika tidak ada kesalahan maka enkripsi password $password = balik_md5 ( $password );

// masukkan data ke database $hasil = mysql_query ( "INSERT INTO user VALUES (' $username ', ' $password ')" ); // jika ada kesalahan tampilkan if (! $hasil )

echo 'Error: Gagal memasukkan data ke database' ; else echo 'Data berhasil dimasukkan ke database<br><br>' . '<a href="secure_login.php">Tes Login</a>' ;

break ; /**************/ } // akhir switch

// tutup koneksi MySQL mysql_close ();

Sim pan pada direkt ori h a r i- 1 5 dengan nam a se cu r e _ login .php. Jalankan pada browser anda. Klik link Tam bah User unt uk m enam bah user baru. Pada usernam e isikan gu e st dan pada password isikan pa s1 2 3 . Coba lihat isi dari t abel user pada phpMyAdm in at au MySQL m onit or. Jika sudah m asuk m aka out put nya akan sepert i berikut

+----------+----------------------------------+ | username | password | +----------+----------------------------------+ | guest | 0da656c1352c7ec167b91122dd6d1aff | +----------+----------------------------------+

Anda lihat password dari field bukan pas123. Unt uk login user t idak perlu m enget ikkan password 0da656c1352c7ec167b91122dd6d1aff. Tet api t et ap m enggunakan pas123 yang kem udian dienkrip m enggunkan balik_md5() dan m enghasilkan st ring chiper yang sam a dengan didat abase.