KangJaz.com

Tempat Tips, Tutorial dan Source Code dari seorang newbie

Cara Menggunakan Password_hash() dan Password_verify() untuk Authentikasi Login

21 November 2016 | Kategori : PHP

Cara Menggunakan Password_hash() dan Password_verify() untuk Authentikasi Login - Password merupakan suatu hal paling vital dalam sebuah aplikasi yang mewajibkan seorang user untuk melakukan login terlebih dahulu untuk memakainya. Pasalnya jika password user tersebut diketahui oleh pihak yang tak bertanggung jawab, bukan tidak mungkin akun dari user tersebut akan diretas oleh pihak tersebut. Untuk itu keamanan dari sebuah password merupakan sebuah hal wajib bagi setiap programmer untuk melindungi akun user dari aplikasi yang dibuatnya.

cara-menggunakan-password-hash-dan-password-verify

Bicara masalah keamanan password, bagi sobat yang masih menggunakan algoritma MD5 untuk melakukan encrypt password, saya sarankan untuk beralih menggunakan metode hash.

Apa sih Hash itu?

Hash merupakan sebuah metode enkripsi yang dilakukan hanya satu arah, dengan kata lain password / kata yang telah dienkripsi tidak mungkin bisa dikembalikan menjadi kata asal. Jadi bukan tidak mungkin keamanannya pun lebih baik daripada MD5. Karena, meskipun oknum tak bertanggung jawab mengetahui password yang ada di database, mereka tetap tidak bisa menebak kata apa yang digunakan oleh user sebagai kata sandinya.

Bagaimana sih cara mengenkripsi password menggunakan hash ?

Bagi sobat yang belum mengetahui cara mengenkripsi password menggunakan hash / melakukan hashing password, tenang sobat, kali ini saya akan berbagi tutorial bagaimana sih cara melakukan hashing password dengan mudah. Kenapa saya bilang mudah, karena pada bahasa pemrogramman PHP khususnya yang versi 5.5.x keatas telah menyiapkan sebuah fungsi untuk melakukan hashing password. Yap, kita bisa menggunakan fungsi password_hash() untuk melakukan enkripsi. Untuk menggunakan fungsi tersebut sobat bisa lihat script di bawah ini :

<?php
echo password_hash("password", PASSWORD_BCRYPT, ['cost' => 10]);
?>

dari script di atas, kata password akan dienkripsi menjadi kata di bawah ini :

$2y$10$ipn3Ov3llgo.5l1USzymt.fjxTASgwRR.jJiSclpHK9wnE/BLPtg6

Mungkin sobat akan menemukan password yang berbeda meskipun sobat menulis persis seperti contoh, jangan khawatir ya sob, seperti yang sudah saya jelaskan di atas tadi, bahwa algoritma hash ini hanya berjalan satu arah yang mana hasil enkripsi akan selalu berubah-ubah. Nggak percaya ya? silahkan sobat refresh tab browser yang sobat gunakan untuk melihat hasil hashing tadi, dan lihat hasilnya akan berubah ubah setiap kali sobat melakukan refresh.

Sedikit penjelasan nih sob, tentang fungsi password_hash() di atas :

  • password merupakan kata yang akan dienkripsi
  • PASSWORD_BCRYPT merupakan algoritma yang digunakan untuk mengenkripsi kata
  • ['cost' => 10] merupakan nilai berapa kali hashing password dilakukan, jika nilainya 10 maka proses hashing akan dilakukan sebanyak 2^10 atau 1024 kali.

Bagaimana melakukan authentikasi jika passwordnya dienkripsi satu arah?

Mungkin ada pertanyaan semacam itu, tenang sob, PHP yang baik hati juga sudah menyiapkan sebuah fungsi untuk keperluan verifikasi passwordnya. Kita bisa menggunakan fungsi password_verify() untuk memverifikasi password yang diinputkan oleh user. Untuk cara menggunakan bisa dilihat script di bawah ini :

<?php

$pass = '$2y$10$ipn3Ov3llgo.5l1USzymt.fjxTASgwRR.jJiSclpHK9wnE/BLPtg6';

if (password_verify("password", $pass)) {
   echo 'Login berhasil';
} else {
   echo 'Opps... Password salah';
}

?>

Sedikit keterangan dari script di atas :

  • $pass merupakan variabel untuk menampung hasil hashing menggunakan fungsi password_hash tadi
  • password_verify merupakan fungsi untuk mencocokkan password yang kita inputkan dengan password yang telah dienkripsi dengan hash
  • password merupakan password yang kita inputkan

Jika diterapkan untuk authentikasi login, kita harus melakukan 2 kali authentikasi nih sob. Untuk authentikasi yang pertama kita gunakan untuk mencocokkan username / email serta mendapatkan password hasil hashing yang ada di database, kemudian authentikasi kedua adalah memverifikasi password yang diinputkan dengan password yang ada di database.

Oh iya sob, untuk kata password itu diganti dengan data password yang dikirim dari form dan $pass merupakan password yang didapatkan dari database. Sedikit tambahan lagi, karena kita melakukan dua kali authentikasi maka sangat disarankan untuk username / email di jadikan unique agar tidak terjadi penggandaan data, terbayangkan jika ada dua username sama dengan user berbeda yang ingin login, pastinya sistem akan kebingungan hehehe

Mungkin cukup ini dulu ya sob coretan kali ini, semoga sedikit coretan ini bisa bermanfaat buat sobat semua...

CMIIW