Trik login yang aman dengan Framework Codeigniter mengunakan “Password_hash”

Trik login yang aman dengan Framework Codeigniter mengunakan “Password_hash”

Banyak pertanyaan yang muncul di Group Facebook, bagaimana cara membuat login yang aman,

tipe enkripsi apa yang harus digunakan untuk meng-enkripsi password ? Kalau anda menjawab tipe enkripsi md5 yang aman untuk membuat password, kalian salah karena sekarang dan mungkin beberapa tahun belakangan tipe enkripsi md5 sudah sangat mudah di bobol oleh para attacker newbie sekalipun. Sudah banyak tool online yang digunakan untuk membuat men-decrypt tipe enkripsi ini diantaranya :https://www.md5online.org/ , https://hashes.org/ dan masih banyak yang lainnya

Lalu tipe enkripsi apa yang aman untuk membuat password ? Dari beberapa jawaban di group facebook banyak yang menyarankan untuk membuat tipe enkripsi mengunakan “password_hash”.

Apa itu password hash ? Dan bagaimana cara mengunakannya di Framework Codeigniter ? Password_hash adalah salah satu fungsi yang terdapat pada PHP untuk melakukan Hash, mengunakan algorithma hashing satu arah  (one-way hashing), fungsi ini terdapat pada php versi 5.5 keatas

Untuk mengunakannya di Framework Codeigniter dan lebih aman maka ikuti langkah langkah dibawah ini dibawah ini :

1. buat terlebih dahulu Databasenya, disini saya membuat database dengan nama “login”

2. kemudian buat sebuah tabel dengan nama user, untuk fieldnya buat seperti dibawah ini

3. setelah database dibuat, sekarang kita atur koneksinya di appliaction/config/database.php, atur sesuai dengan setingan database kamu, yang perlu diubah hanya username,password, dan nama database.

'username' => 'root',

'password' => 'root',

'database' => 'login',

hostname' => 'localhost',

4. sekarang kita akan mengatur “encryption_key”nya, silahkan buka file application/config/config.php terletak pada baris 329, isi sesuai dengan keinginan kamu, disini saya mengisinya sebagai berikut:

$config['encryption_key'] = '1234567890abcdEFG

5. jangan lupa atur autoloadnya di application/config/autoload.php , pada autoload library silahkan load library encryption, seperti dibawah ini

$autoload['libraries'] = array('session','form_validation','database','encryption');

6. Untuk setingannya kita sudah selesai, sekarang kita tinggal prakteknya, silahkan buat buka Controller Welcome.php kamu dan buat seperti ini pada function index

public function index()

{

$a='admin';

echo hash('sha512',$a . config_item('encryption_key'));

}

7. secara default passwordnya adalah admin, sekarang coba jalankan di browser

8itulah adalah hasil dari password admin yang telah kita hash tadi

sekarang kita akan membuat halaman login yang aman di Framework mengunakan tipe hash password_hash, ikuti langkah langkah dibawah ini.

1. Pertama buat sebuah function di Controller Welcome.php tadi, kemudian copy script dibawah ini .

public function index()

{

if ($this->session->userdata('logged_in')==TRUE)

{

redirect('dashboard','refresh');

}

$this->load->view('vlogin');

}

2. simpan file tersebut, o iya jangan lupa juga kita akan load model loginnya terlebih dahulu, seperti dibawah ini

function __construct()

{

parent::__construct();

$this->load->model('Login_m');

}

3. setelah Controller Welcome dijalankan otomatis kita akan diarahkan ke view “vlogin”, sekarang buat sebuah file vlogin.php di folder views, dan copy script dibawah ini :

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title></title>
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
  <link rel="stylesheet" href="<?=base_url()?>assets/bootstrap/dist/css/bootstrap.min.css">
  <link rel="stylesheet" href="<?=base_url()?>assets/font-awesome/css/font-awesome.min.css">
  <link rel="stylesheet" href="<?=base_url()?>assets/Ionicons/css/ionicons.min.css">
  <link rel="stylesheet" href="<?=base_url()?>assets/css/AdminLTE.min.css">
  <link rel="stylesheet" href="<?=base_url()?>assets/css/skins/_all-skins.min.css">
<style >
              #response{display: none}
        </style>
  <link rel="stylesheet" href="<?=base_url()?>assets/iCheck/square/green.css">

  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">

</head>

<body class="hold-transition login-page ">

<div class="login-box">
       <div class="login-logo">
    <a href="<?=site_url()?>">sd</a>
  </div>
  <!-- /.login-logo -->
  <div class="login-box-body " id="loginbox">
    <p class="login-box-msg">LOGIN</p>

    <form action="<?=site_url()?>welcome/cek" method="POST" id="loginform">
      <div class="form-group has-feedback">
        <input type="text" class="form-control" placeholder="Username" name="username" id="username">
        <span class="glyphicon glyphicon-envelope form-control-feedback"></span>
      </div>
      <div class="form-group has-feedback">
        <input type="password" class="form-control" placeholder="Password" name="password" id="password" >
        <span class="glyphicon glyphicon-lock form-control-feedback"></span>
      </div>
      <div class="row">
                <!-- /.col -->
        <div class="col-xs-12">
          <button type="submit" class="btn btn-primary btn-block btn-flat">Sign In</button>
        </div>
        <!-- /.col -->
      </div>
    </form>
    <div class="text-center" id="response">salah!</div>

  </div>
  <!-- /.login-box-body -->
  <!-- update -->
   </div>

<!-- /.login-box -->

<!-- jQuery 3 -->
<script src="<?=base_url()?>assets/js/jquery.min.js"></script>  
<!-- Bootstrap 3.3.7 -->
<script src="<?=base_url()?>assets/bootstrap/dist/js/bootstrap.min.js"></script>
<!-- iCheck -->
<script src="<?=base_url()?>assets/iCheck/icheck.min.js"></script>
<script src="<?=base_url()?>assets/js/login.js"></script>
<script>
        $(document).ready(function (){
            $("#loginform").submit(function (e){
                e.preventDefault();
                var url = $(this).attr('action');
                var method = $(this).attr('method');
                var data = $(this).serialize();
                
                $.ajax({
                   url:url,
                   type:method,
                   data:data
                }).done(function(data){
                   if(data !=='')
                    {
                        $("#response").show('fast');
                        $("#response").effect( "shake" );
                        $('#loginform')[0].reset();
                    }
                    else
                    {
                    window.location.href='<?php echo site_url() ?>dashboard/';
                    throw new Error('go');
                    } 
                });
            });
            
            $( "div" ).each(function( index ) {
            var cl = $(this).attr('class');
            if(cl =='')
                {
                    $(this).hide();
                }
            });
            
        });
        </script>   
<script>
  $(function () {
    $('input').iCheck({
      checkboxClass: 'icheckbox_square-green',
      radioClass: 'iradio_square-green',
      increaseArea: '20%' // optional
    });
  });
</script>

</body>
</html>

4.  buat sebiah function cek di controller Welcome, copy script dibawah ini:

public function cek()
    {
        $username=$this->input->post('username');
        $password=$this->input->post('password');

        //load model
        if($this->Login_m->login($username,$password)){}else{echo "terdapat kesalahan";}
    }

5. sekarang kita beralih ke model Login_m, copy script dibawah ini ,

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Login_m extends CI_Model {

    public function login($username,$password)
    {
        $password=$this->hash($password);
        $this->db->where('username',$username);
        $this->db->where('password',$password);
        $query = $this->db->get('user');
        if($query->num_rows()==1){
            foreach ($query->result() as $row){
                $data = array(
                            'username'      =>$row->username,
                            'nama'          =>$row->nama,
                           // 'iduser'          =>$row->id,
                            'level'         =>$row->level,
                            'akses'         =>$row->id,
                            'logged_in'     =>TRUE
                        );
            }
            $this->session->set_userdata($data);
            return TRUE;
        }
        else{
            return FALSE;
      }    
    }
    public function hash($string)
    {
        return hash('sha512', $string . config_item('encryption_key'));
    }
       
}

Selesai, silahkan dicoba jalankan di browser anda, sangat mudah kan ? jika ada yang bertanya seputar cara membuat login yang aman dengan mengunakan password_hash, silahkan tinggalkan di komentar, terimakasih dan HAPPY CODING