Spread the love
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Membuat login yang sederhana di php bukanlah hal yang sulit hanya membutuhkan form, user, autentikasi dan sudah. Namun untuk aplikasi kelas menengah ke atas, keberadaan modul login harus dibuat bukan biasa-biasa saja, karena login bisa menjadi pintu kelemahan aplikasi, membiarkan orang lain masuk dengan mudah. Oleh karena itu fitur-fitur login harus lengkap dan tentunya menerapkan standar security yang tinggi. Tapi untuk membuat login yang aman dan powerfull bukanlah hal mudah pula, karena perlu mempertimbangkan fitur yang saling terkait sehingga berimbas developmentnya menjadi lebih lama.

Logsys dapat menjadi pertimbangan bagi developer yang butuh menerapkan sistem login yang aman dan powerfull, karena menerapkan security berupa PDO dan hashes, selain itu sudah dilengkapi fungsi-fungsi berupa fitur yang lengkap. Beberapa diantaranya fitur Logsys :

  • Login dan Register
  • Fitur Remember Me
  • Secure (mengggunakan PDO & hashes)
  • Fitur “Forgot Password ?”
  • Fungsi ubah password
  • Field tambahan yang bisa ditambahkan pada informasi user
  • Tool tambahan seperti validasi email dan Random String generator
  • Dapat dengan mudah detail mengenai user
  • Auto-redirect berdasarkan status user
  • Informasi waktu user joined
  • Proteksi dari Brute Force
  • Fitur login attempts
  • dsb

Logsys ini di develop oleh Subin Siby dan dimaintain dengan baik olehnya, karena sejak pertama kali dirilis hingga kini selalu memiliki update. Anda dapat mendownload Logsys di sini

Berikut ini beberapa cara untuk menggunakan Logsys.

1. Setelah Anda mendownload Logsys, maka anda memerlukan file class.logsys.php

2. Anda perlu membuat table “users” (tidak harus users, namun defaultnya adalah users).

3. Setelah itu untuk struktur table users kurang lebih memiliki field seperti :


id | username | email | password | password_salt | name | created | attempt

Anda dapat memilih menggunakan username atau email sebagai login. Sebenarnya core nya dari field itu tentu username, password, dan password_salt sisanya adalah opsional yang tentunya diperlukan sesuai fungsinya. Misal attempt tentu untuk menentukan brute force apakah sedang dilakukan.

Fungsi balikan dari logsys kebanyakan berupa boolean, jadi jika perlu melakukan validasi value, disarankan menggunakan operator “===” dibandingkan “==”.

4. Selanjutnya kita melakukan konfigurasi pada logsys ini pada file. Berikut konfigurasi yang dapat dilakukan :

sectionOptionDescriptionExample
infocompanyYour site/company name. Used for including in E-Mails to be sentblog name
emailUsed for “From” header in E-Mails sentmy_address@email.com
dbhostThe MySQL Database Hostname.localhost
portThe MySQL Database Port3306
usernameThe MySQL Database Usernameroot
passwordThe MySQL Database Password for the username givenmypassword
nameThe Database Nameprojects
tableThe Database Table where you want to store users’ datausers
keyscookieA Secure Key that is used to encrypt cookie valuessadauj3n(#ff)#%$
saltThe common password salt (site salt) that is used to encrypt all the users’ password when creating an account.vdsjn3md%##$*5
featuresstart_sessionShould the class call session_start();true (boolean)
email_loginShould the class allows logging in with both E-Mail & Username ?true (boolean)
remember_meIf value is provided to \Fr\LS::login(), should user be automatically logged in even after the end of PHP session.true (boolean)
auto_initShould \Fr\LS::init() be ran automatically on the first logSys function called in any page ?false (boolean)
block_brute_forcePrevent Brute Forcing.
By enabling this, logSys will deny login for the time mentioned in the config value “brute_force”->”time_limit” seconds after config value “brute_force”->”tries” incorrect login tries.
true
brute_forcetriesNumber of login tries alloted to users5
time_limitThe time IN SECONDS for which block from login action should be done after incorrect login attempts. Use this tool for converting minutes to seconds. Default : 5 minutes300
pagesno_loginAn array containing the relative path name of pages that doesn’t require logging in like the index page of sitearray(“/”)
login_pageThe relative path name of login Page/login.php
home_pageThe relative path name of home page that the class should redirect to after logging in/home.php
cookiesexpireThe expire time of the 2 cookies created during login process. This value is used for making the time using strtotime() function. So, the value must be compatible withstrtotime()+30 days
pathThe `path` value of cookies./
domainThe `domain` value of cookies. See setcookie()domain.com

Pastikan pada section keys, anda menggunakan cookie dan hash yang berbeda dan tidak ada yang mengetahuinya.

5. Selanjutnya Anda perlu melakukan setup database seperti field yang tadi disebutkan, menjadi kurang lebih seperti ini:


CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(10) NOT NULL,
  `email` tinytext NOT NULL,
  `password` varchar(64) NOT NULL,
  `password_salt` varchar(20) NOT NULL,
  `name` varchar(30) NOT NULL,
  `created` datetime NOT NULL,
  `attempt` varchar(15) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

Ingat anda tidak perlu berpatokan pada struktur ini, Anda dapat menambahkan atau mengurangi setidaknya core field yang dibutuhkan tersedia.

Jika Anda memerlukan fitur untuk “Lupa password”, maka Anda perlu menambahkan satu table lagi dengan nama resetTokens dengan struktur sql seperti ini :


CREATE TABLE IF NOT EXISTS `resetTokens` (
 `token` varchar(40) NOT NULL COMMENT 'The Unique Token Generated',
 `uid` int(11) NOT NULL COMMENT 'The User Id',
 `requested` varchar(20) NOT NULL COMMENT 'The Date when token was created'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Untuk nama table ini disarankan Anda tidak mengubahnya, karena jika Anda ingin menggunkan nama lain, maka Anda perlu mengganti nama table resetTokens dalam file logsys dengan nama table Anda.

6. Untuk inisialisasi Logsys, anda cukup menjalankan seperti ini :


<?php
require "class.logsys.php";
\Fr\LS::init();
?>

7. Sekarang kita buat satu tampilan sederhana untuk login seperti ini :


<html>
 <head>
  <title>Log In</title>
 </head>
 <body>
  <div class="content">
   <form method="POST">
    <label>Username / E-Mail</label><br/>
    <input name="login" type="text"/><br/>
    <label>Password</label><br/>
    <input name="pass" type="password"/><br/>
    <label>
     <input type="checkbox" name="remember_me"/> Remember Me
    </label>
    <button name="act_login">Log In</button>
   </form>
  </div>
 </body>
</html>

8. Lalu untuk prosesnya seperti ini :


<?php
require "config.php";
\Fr\LS::init();
if(isset($_POST['action_login'])){
    $identification = $_POST['login'];
    $password = $_POST['password'];
    if($identification == "" || $password == ""){
        $msg = array("Error", "Username / Password Wrong !");
    }else{
    $login = \Fr\LS::login($identification, $password, isset($_POST['remember_me']));
        if($login === false){
            $msg = array("Error", "Username / Password Wrong !");
        }else if(is_array($login) && $login['status'] == "blocked"){
            $msg = array("Error", "Too many login attempts. You can attempt login after ". $login['minutes'] ." minutes (". $login['seconds'] ." seconds)");
        }
    }
}
?>

Sintaks yang digunakan untuk menggunakan fungsi $LS->login() seperti ini :


\Fr\LS::login($username, $password, $remember_me, $cookies)

Jadi fungsi diatas akan menghasilkan balikan boolean TRUE jika berhasil, dan balikan FALSE jika gagal. Parameter $remember_me defaultnya adalah FALSE, namun jika Anda akan menggunakan fitur remember_me Anda harus mensetnya TRUE dan juga tentunya di konfigurasi awal harus diaktifkan, maka selanjutnya akan terus aktif walau session user sudah ditutup. Sedangkan parameter $cookies defaultnya sudah aktif, karena menentukan cookies akan otomatis dibuat ketika user login.

Bisa dibilang dengan cara diatas Anda sudah menjalankan login yang Aman dan powerfull. Tapi bagaimana membuat usernya? Oke ini caranya untuk register user. Caranya pun cukup simpel seperti diatas.

Caranya dengan memanggil sintaks fungsi $LS->register() seperti ini :


\Fr\LS::register($username, $password, $extraValues);

Pada parameter $extraValues merupakan array yang berisi key dan value yang diinput bersamaan dengan username dan password. Contoh seperti ini :


array("name" => $personName)

Nah, jika data array yang dilewatkan lebih dari satu, maka seperti ini :


array("email" => $email, "name" => $name)

Sebagai catatan, nama field di database haruslah sama dengan key yang anda lewat di array extraValues.

Oke sebagai tambahan fitur-fitur yang biasanya tersedia pada modul login

Cek User sedang login :


<span class="identifier"><span class="keyword">if</span></span>(\Fr\LS::$<span class="identifier">loggedIn</span>){
<span class="regexp">  //</span> <span class="constant">User</span> <span class="identifier">logged</span> <span class="identifier"><span class="keyword">in</span></span>
}else{
<span class="regexp">  //</span> <span class="constant">User</span> not <span class="identifier">logged</span> <span class="identifier"><span class="keyword">in</span></span>
}

Cek User sudah ada atau tidak :


\Fr\LS::userExists($username)

Fungsi Logout :


\Fr\LS::logout();

Fungsi Ganti Password :


\Fr\LS::changePassword($current_password, $new_password);

Fungsi Detail Info User :

Jika hanya memerlukan field tertentu


\Fr\LS::getUser("column_name", $userID);

Tapi jika Anda perlu semua data, maka Anda dapat melakukan “*”, seperti ini :


Array(
 "id" =&gt; 1,
 "username" =&gt; "username",
 "email" =&gt; "mail@email.com",
 "password" =&gt; "asd4845ghnvbmvolfpsdpsa0ffkfoeww89d9d25f1f56",
 "password_salt" =&gt; "mv5r7(4565v"
)

Fungsi Update user :


\Fr\LS::updateUser($values, $userID);

Fungsi update user ini berdasarkan userid, sementara parameter values berisi array data yang ingin diupdate seperti ini :


\Fr\LS::updateUser(array(
    "name"  =&gt; "user",
    "birth" =&gt; "20/01/2000"
));

Cukup banyakan?. Masih ada lagi fungsi lain yang bisa digunakan. Lebih banyak lagi Anda dapat mengunjungi websitenya : http://subinsb.com/php-logsys

Related Posts
Astra : Automated Security Testing For REST API’s

Astra merupakan tool berbasis python untuk melakukan testing otomatis keamanan API REST, terkadang melakukan testing penetration pada API REST bukan Read more

HexorBase : Audit Multi Database Server Secara Bersamaan

HexorBase merupakan aplikasi database yang dikembangkan untuk mengatur dan melakukan audit multi database secara secara bersamaan dan terpusat (centralized location). Read more

Shadow Daemon : Tool Proteksi Web Aplikasi Layaknya Firewall

Apa itu shadow daemon? shadow daemon merupakan sekumpulan tool yang digunakan untuk mendeteksi, melakukan protokol dan mencegah terhadap serangan web. Read more

Howto : Setup Apache dengan Modsecurity di Ubuntu

Modsecurity merupakan Web Application Firewall (WAF) yang bekerja dengan Apache, IIS, Nginx. Modsecurity mendukung penggunaan rule engine untuk menerapkan tingkat Read more

Tagged : # #

Leave a Reply

Your email address will not be published. Required fields are marked *