Tutorial beberapa bulan yang lalu, saya telah menjelaskan dan memberikan sedikit contoh mengenai implementasi level admin menggunakan session pada web berbasis PHP. Percobaan sederhana tersebut masih memiliki banyak kelemahan terutama pada fungsi header dan juga security.
Oleh karena itu, saya akan melengkapinya dengan beberapa perubahan fungsi PHP header location dan penambahan security login menggunakan MD5. Jika anda belum membaca dan mempraktikan tutorial sebelumnya, saya sarankan untuk mencoba mengaplikasikan tutorial tersebut, disini.
Dalam tutorial ini, hal paling menonjol terletak pada penambahan fungsi “Add User/Admin” yang miliki fitur enkripsi MD5, dimana telah banyak dipakai pada mayoritas aplikasi web berbasis PHP untuk security login. MD5 sendiri merupakan sebuah rekayasa kriptografi untuk karakter yang menghasilkan hash. 😀
Lets Start !
Persiapan database dan konfigurasi
Penulis membuat database dengan nama Leveling dan membuat sebuah table ‘user’ yang berisi field, berikut :
1. id => tipe data Integer – 5 digit (Primary, Auto Increment).
2. Username => tipe data Varchar – 50 digit (Unique, Not Null).
3. Level => tipe data Varchar – 20 digit (Not Null).
4. Password => tipe data Varchar – 50 digit (Not Null).
Berikut adalah screenshot database yang telah penulis buat,
Setelah desain database kita buat seperti diatas, insert secara manual user dengan nama Admin. Untuk password, kita bisa memanfaatkan MD5 Online Generator seperti di laman www.md5.cz, Caranya, tinggal kita masukkan kombinasi huruf password dan klik button “hash darling, hash!” 😀
Untuk konfigurasi database, buatlah file config.php dan ketik kode standar konfigurasi seperti di bawah ini :
<?php $host="localhost"; $user="root"; $password=""; $koneksi=mysql_connect($host,$user,$password) or die("Gagal koneksi mas bro..!"); mysql_select_db("leveling"); ?>
Membuat halaman Index / Login
Langkah selanjutnya adalah membuat halaman index.php yang berisi tampilan login utama kita. Pada form index login ini, kita akan melemparnya melalui action ke dalam file login.php. Berikut adalah script index.php dan login.php yang bisa Anda ketik :
<?php // memulai session session_start(); error_reporting(0); if (isset($_SESSION['level'])) { // jika level admin if ($_SESSION['level'] == "admin") { header('location:admin.php'); } // jika kondisi level user maka akan diarahkan ke halaman lain else if ($_SESSION['level'] == "user") { header('location:user.php'); } } ?> <div id="form"> <form method="post" action="login.php" class="form-horizontal"> <label class="username">Username</label><br> <input class="input" type="text" name="username" placeholder="Masukkan Username"><br> <label class="password">Password</label><br> <input class="input" type="password" name="pass" placeholder="Masukkan Password"><br> <button type="submit" name="submit" class="btn">Login</button> </form> </div>
Login.php script,
<?php session_start(); include 'config.php'; $username = mysql_real_escape_string($_POST['username']); $password = mysql_real_escape_string($_POST['pass']); $password = md5($password); // query untuk mendapatkan record dari username $query = "SELECT * FROM user WHERE username = '$username'"; $hasil = mysql_query($query); $data = mysql_fetch_array($hasil); // cek kesesuaian password if ($password == $data['password']) { echo "sukses"; // menyimpan username dan level ke dalam session $_SESSION['level'] = $data['level']; $_SESSION['username'] = $data['username']; //Penggunaan Meta Header HTTP echo '<META HTTP-EQUIV="Refresh" Content="0; URL=admin.php">'; exit; } else echo '<h1>Login gagal</h1>'; ?>
Nah, dari script login.php Anda bisa melihat dua buah fungsi keamanan yang umum dipakai oleh developer PHP.
- Pertama adalah mysql_real_escape_string() yang berfungsi untuk mengamankan kombinasi string berbahaya SQL Injecting,
- dan yang kedua adalah pada md5($password) yang akan mengkonversi string password kedalam hash MD5.
Membuat halaman Admin / Insert User
Pada file login.php, kita telah menuliskan beberapa kode jika kombinasi username dan password sesuai maka user akan ‘dilempar’ ke sebuah halaman admin.php menggunakan fungsi Meta Header Refresh. Fungsi ini akan berguna jika server PHP kita masih menggunakan PHP versi lawas.
Berikut adalah script untuk halaman admin.php, dimana pada halaman tersebut berisi form untuk membuat user baru memanfaatkan fungsi MD5 dan juga anti SQL Injection. 🙂
<?php session_start(); error_reporting(0); include 'config.php'; $username = mysql_real_escape_string($_POST['username']); $password = mysql_real_escape_string($_POST['pass']); $password = md5($password); $level = $_POST['level']; // query untuk insert data user baru if (isset($username) && isset($password) && isset($level)) { $insert = "insert into user set username = '$username', password = '$password', level = '$level'"; if (mysql_query($insert)) { echo "<h3>User berhasil ditambahkan</h3>"; } else { echo "<h3>User gagal ditambahkan</h3>"; } } ?> <?php // memulai session session_start(); error_reporting(0); if (isset($_SESSION['level'])) { // jika level admin if ($_SESSION['level'] == "admin") { echo "<h3>Form add user</h3>"; echo "<form method='post' action='admin.php' class='form-horizontal'> <label class='username'>Add Username</label><br> <input class='input' type='text' name='username' placeholder='Username'><br> <label class='password'>Password</label><br> <input class='input' type='password' name='pass' placeholder='Password'><br> <label class='level'>Level</label><br> <select class='level' name='level'> <option value='admin'>Admin</option> <option value='user'>User</option> </select> <button type='submit' name='submit' class='btn'>Add user</button> </form>"; echo "<a class='logout' href='logout.php'>Logout Now</a>"; } // jika kondisi level user maka akan diarahkan ke halaman lain else if ($_SESSION['level'] == "user") { echo '<META HTTP-EQUIV="Refresh" Content="0; URL=user.php">'; exit; } } if (!isset($_SESSION['level'])) { echo '<META HTTP-EQUIV="Refresh" Content="0; URL=index.php">'; exit; } ?>
Oke, selesai. Jika tutorial di atas pembaca ikuti dan pahami dengan saksama, saya pastikan aplikasi sederhana leveling dan securing menggunakan MD5 akan berjalan dengan baik. Saya telah menyertakan source code dan database untuk pembaca implementasikan.
Terima kasih ! Caaaooo 😀
apa ini membuat password terenkripsi pada saat melakukan perintah POST, untuk menghindari sniffing melalui wireshark misalnya ?
betul sekali.
pak boss, ketika saya coba muncul “Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at C:\xampp\htdocs\Login_PHP\index.php:8) in C:\xampp\htdocs\Login_PHP\index.php on line 14”. trus saya coba masukkan username:admin, pass=123 tapi kok Login gagal yang keluar ya??