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.