Fungsi password_verify() Pada PHP
Halo, teman-teman! Kali ini kita akan mengupas tuntas sebuah fungsi yang
sebenarnya lumayan sering disebut-sebut di kalangan para pengembang web,
khususnya yang menggunakan PHP. Nama fungsinya adalah password_verify()
.
Buat kamu yang masih baru di dunia pemrograman, jangan khawatir. Di artikel ini
kita akan membahasnya secara santai, tapi tetap detail, dari segi apa
itu password_verify()
, gimana cara kerjanya, dan kenapa kita butuh
itu dalam mengamankan aplikasi kita.
Nah, sebelum kita nyemplung lebih dalam, mari kita bahas sedikit latar belakang
tentang kenapa topik ini penting. Ketika kita membuat aplikasi web yang butuh
fitur login, kita pasti berurusan dengan password pengguna. Gimana cara
menyimpan password tersebut biar aman? Gimana menghindari pencurian data
pengguna? Di sinilah fungsi password_hash()
dan
password_verify()
memainkan peranan krusial.
password_verify() khususnya berguna banget pas kita mau
membandingkan password yang diinput user dengan password yang sudah disimpan
di database (yang tentunya sudah di-hash).
Apa Itu password_verify()
?
password_verify()
adalah sebuah fungsi di PHP yang berfungsi untuk
memeriksa apakah sebuah plain-text password (password mentah yang diinput
user) cocok dengan hash yang telah disimpan di database. Caranya, fungsi ini akan
memasukkan password mentah yang kita berikan dan mencocokkannya dengan
hashed password yang kita punya. Jika cocok, dia akan mengembalikan
true
; kalau tidak, dia akan mengembalikan false
.
Buat kamu yang baru tahu, normalnya kita nggak akan pernah nyimpen password
dalam bentuk teks asli di database. Gawat dong kalau sampai database-nya
kebocoran! Makanya, developer biasanya menyimpan password dalam bentuk hash.
Salah satu teknik hashing yang direkomendasikan adalah dengan menggunakan
password_hash()
yang juga disediakan oleh PHP. Kenapa dua fungsi
ini sebaiknya dipakai bareng? Karena password_hash()
secara default
menggunakan algoritma yang aman (misalnya BCRYPT
atau
Argon2
), lalu password_verify()
disiapkan agar cocok
dengan format hash tersebut.
Bagaimana Cara Kerjanya?
password_verify()
punya sintaks yang sangat simpel:
bool password_verify ( string $password, string $hash )
Parameter pertama $password
adalah password mentah yang diketik
user saat login, sedangkan $hash
adalah hasil hash password yang
sebelumnya telah kita simpan di database. Hasil dari fungsi ini adalah
true
atau false
. True menandakan
bahwa password mentah yang diinput cocok dengan hash di database,
false berarti tidak cocok.
Poin penting yang perlu kamu catat:
password_verify()
akan mengurus sendiri proses salting dan
pengecekan algoritma. Dengan kata lain, kamu tidak perlu repot bikin salt
sendiri atau memelihara data salt di database. Hal ini dikarenakan
password_hash()
sudah menyimpan informasi salt serta parameter
algoritma di dalam hash itu sendiri.
Keuntungan Menggunakan password_verify()
Mungkin kamu bertanya, "Kenapa sih harus pakai password_verify()
?
Kan kita bisa aja pakai md5()
atau sha1()
yang
sudah ada sejak lama?" Nah, berikut beberapa alasan kenapa fungsi ini
lebih direkomendasikan:
-
Keamanan Lebih Tinggi:
md5()
dansha1()
sudah dianggap tidak memadai untuk keamanan password karena kecepatannya yang tinggi membuat mereka rentan diserang brute force. Sementara itu,password_hash()
danpassword_verify()
memberikan perlindungan tambahan melalui cost factor dan salt yang ditanam langsung. - Penggunaan Mudah: Fungsi-fungsi bawaan ini secara otomatis menangani banyak hal teknis, mulai dari pengelolaan salt hingga pemilihan algoritma. Kamu tidak perlu menulis banyak kode tambahan.
- Standar Resmi PHP: Karena ini sudah terintegrasi langsung di core PHP, proses migrasi (jika sebelumnya kamu pakai metode hashing lain) jadi lebih mudah. Juga ada jaminan bahwa fungsi ini akan di-maintain oleh tim pengembang PHP.
Contoh Dasar Penggunaan password_verify()
Mari kita lihat contoh paling sederhana. Misalnya kita punya form login. Ketika user memasukkan username dan password, kita ambil data hashed password dari database berdasarkan username tersebut. Kira-kira kodenya seperti ini:
<?php
// Misalkan $user_input_password diambil dari form login
$user_input_password = $_POST['password'];
// $hashed_password diambil dari database
$hashed_password = '$2y$10$R/vI4G6IXcZslN2YjPW0heGwxJ5EnW7nGbqxdlz4k1mM2xCNG6B6.'; // Contoh hash
if (password_verify($user_input_password, $hashed_password)) {
echo "Password cocok, user terotentikasi!";
} else {
echo "Password salah, silakan coba lagi.";
}
Contoh hash di atas adalah hasil dari password_hash("somepassword", PASSWORD_BCRYPT)
.
Kalau user mengetik password yang sama dengan string aslinya (somepassword
),
maka password_verify()
akan mengembalikan nilai true
.
Studi Kasus: Registrasi dan Login
Biar makin jelas, kita akan bahas alur penggunaan password_hash()
dan password_verify()
secara lengkap, mulai dari proses registrasi
hingga login. Biar lebih kasual, kita anggap aja kita lagi bikin sistem
user sederhana.
1. Registrasi
Di tahap ini, user akan membuat akun baru. Mereka mengisi form yang di dalamnya ada username dan password. Ketika form di-submit, kita akan melakukan hal-hal berikut:
-
Ambil password mentah yang diinput user (misalnya
$plain_password
). -
Hash password tersebut menggunakan
password_hash()
dengan algoritma yang disarankan (misalnyaPASSWORD_BCRYPT
atauPASSWORD_DEFAULT
). - Simpan hasil hash ke database bersama data user lainnya.
<?php
// Proses registrasi
$username = $_POST['username'];
$plain_password = $_POST['password'];
// Lakukan hashing pada password
$hashed_password = password_hash($plain_password, PASSWORD_BCRYPT);
// Simpan ke database
$sql = "INSERT INTO users (username, password) VALUES ('$username', '$hashed_password')";
// Eksekusi query, dan seterusnya
Nah, di sini kita belum nyentuh password_verify()
sama sekali,
karena fungsinya memang lebih relevan di proses login.
2. Login
Ketika user login, mereka memasukkan username dan password. Kita ambil data
hashed password berdasarkan username tersebut dari database (pastikan
usernamenya ada). Kemudian, kita gunakan password_verify()
untuk mengecek kecocokan password mentah yang diinput dengan hash di database.
<?php
// Proses login
$username = $_POST['username'];
$plain_password = $_POST['password'];
// Ambil hash dari database
// SELECT password FROM users WHERE username = '$username'
$hashed_password = ...; // hasil query database
if (password_verify($plain_password, $hashed_password)) {
echo "Login berhasil! Selamat datang, $username.";
} else {
echo "Username atau password salah.";
}
Jika cocok, maka kita bisa mengizinkan user masuk ke sistem. Kalau nggak,
kita tolak dan mungkin menampilkan pesan error. Inilah penggunaan dasar
password_verify()
yang paling umum ditemui di aplikasi web.
Berbagai Kasus Penggunaan password_verify()
Tentu aja, password_verify()
nggak cuma bisa dipakai di proses
login simpel. Ada banyak skenario lain di mana fungsi ini sangat membantu.
Berikut beberapa contohnya.
1. Migrasi dari Metode Hashing Lama
Banyak aplikasi lama yang masih menggunakan md5()
atau
sha1()
untuk hashing password. Ketika mau meng-upgrade ke
password_hash()
dan password_verify()
,
biasanya akan ada fase transisi. Salah satu caranya adalah:
-
Saat user login menggunakan password lama yang di-hash dengan
md5()
atausha1()
, kita verifikasi dulu dengan metode lama. -
Jika cocok, kita langsung re-hash password tersebut dengan
password_hash()
lalu update di database, sehingga next time login, kita bisa pakaipassword_verify()
.
Setelah beberapa waktu, semua password user akhirnya akan menggunakan
format hash baru, jadi kita bisa sepenuhnya beralih ke
password_verify()
. Teknik ini dikenal sebagai
gradual migration atau rehashing on login.
2. Multi-Factor Authentication (MFA)
Meskipun fungsinya masih sama, terkadang kita butuh mengonfirmasi password
pengguna sebelum proses pengiriman kode OTP (One-Time Password) atau
verifikasi dua langkah. Kita tetap bisa menggunakan
password_verify()
untuk memastikan user benar-benar tahu
password akunnya sebelum kita melanjutkan ke langkah MFA berikutnya.
Skemanya kurang lebih sama, yakni cek password_verify()
lalu kalau sukses, barulah kita kirim kode OTP.
3. Session Hijacking Prevention
Ada kalanya, setelah user login, kita ingin memastikan bahwa yang sedang
membuka halaman sensitif memang user yang bersangkutan. Kita mungkin
meminta user memasukkan passwordnya sekali lagi (mirip kayak Twitter
saat pengaturan kata sandi). Di titik ini,
password_verify()
kembali dibutuhkan untuk validasi.
Contohnya saat user mau mengganti alamat email, kita panggil
password_verify()
terhadap password mereka sebelum
benar-benar mengganti data sensitif.
4. Validasi Sebelum Hapus Akun
Seringkali, platform akan meminta pengguna memasukkan kembali password
sebelum menghapus akun. Ini untuk mencegah aksi iseng dari orang yang
kebetulan lagi memakai komputer orang lain. Sekali lagi,
password_verify()
adalah teman setia kita di sini.
Sebelum proses penghapusan akun dilakukan, kita cek dulu password
yang diinput user dengan hash di database.
Tips dan Trik Seputar password_verify()
Meskipun penggunaannya terbilang gampang, ada beberapa tips dan trik yang bisa kamu terapkan demi keamanan dan keefisienan aplikasi:
-
Selalu Gunakan HTTPS
Walaupun kita sudah mengenkripsi password di level backend denganpassword_hash()
, data yang dikirim dari klien ke server tetap rentan disadap kalau tidak menggunakan HTTPS. Jadi, pastikan server aplikasi kamu sudah diatur untuk menggunakan protokol aman ini, agar password nggak bocor di tengah jalan. -
Update Cost Factor Secara Berkala
Kalau kamu pakaiBCRYPT
, ada parameter cost yang menentukan seberapa rumit hashing-nya. Seiring berkembangnya teknologi (misalnya prosesor komputer makin cepat), kita mungkin perlu menaikkan cost factor untuk menambah keamanan. Kamu bisa menambahkan logika di mana kalau password user masih pakai cost factor lama, re-hash dengan cost baru pas user login. -
Gunakan
password_needs_rehash()
PHP punya fungsipassword_needs_rehash()
yang bisa membantu mendeteksi apakah hash lama sudah tidak sesuai dengan algoritma atau cost yang kita inginkan. Kalo iya, kita bisa re-hash password tersebut dengan setting baru. Lalu tinggal update di database. -
Selalu Simpan Hash Bukan Password Mentah
Jangan pernah menyimpan password mentah, walau cuma untuk testing. Kalau butuh, kamu bisa log password di environment local, tapi jangan sampai di server produksi. Ingat, security first! -
Hindari Double Hashing Tanpa Alasan Jelas
Kadang ada yang berpikir, "lebih aman dong kalau kita hash terus di-hash lagi?" Kenyataannya, praktik ini justru bisa membuat password_verify() nggak berguna.password_hash()
danpassword_verify()
sudah dirancang supaya auto-salt dan menanam info algoritma. Double hashing sering bikin pusing tanpa menambah keamanan signifikan.
Pertanyaan yang Sering Muncul (FAQ)
Berikut adalah beberapa pertanyaan yang sering diajukan seputar
password_verify()
dan jawaban singkatnya.
-
Apakah
password_verify()
Hanya Bisa untuk BCRYPT?
Enggak, kok! Meskipun awalnya fungsi ini lebih dikenal untuk BCRYPT, seiring waktu PHP juga mendukung algorithm lain seperti Argon2. Kamu cukup menyesuaikan parameterpassword_hash()
saat membuat hash. Selama kamu pakaipassword_verify()
untuk mencocokkan, prosesnya akan tetap mulus. -
Bagaimana Kalau Mau Memakai
md5()
atausha1()
?
Sebaiknya kamu nggak pakaimd5()
atausha1()
untuk password karena mereka tidak dirancang untuk keamanan modern.password_hash()
danpassword_verify()
sudah punya mekanisme untuk melawan rainbow table dan dictionary attack dengan menambahkan salt secara otomatis dan mendukung cost factor yang bikin serangan brute force semakin sulit. -
Apa Hubungannya
password_verify()
dengan CSRF?
Sebenarnya tidak ada hubungan langsung.password_verify()
fokusnya di verifikasi password, sedangkan CSRF (Cross-Site Request Forgery) adalah serangan yang memanfaatkan session dan cookies. Kamu tetap perlu mengimplementasikan CSRF token atau metode lain untuk mencegah CSRF. -
Kenapa
password_verify()
Tidak Menghasilkan Hash Baru?
Karena tugasnya cuma untuk verifikasi. Kalau kamu butuh hash baru (misalnya re-hash dengan cost yang lebih tinggi), gunakanpassword_needs_rehash()
danpassword_hash()
untuk menghasilkan hash baru.
Menangani Error dan Debugging
password_verify()
sendiri jarang sekali menimbulkan error
kecuali parameternya ada yang null atau bukan string.
Kalau kamu mendapati hasil selalu false
, periksa hal-hal berikut:
-
Apakah Hash di Database Benar-Benar Hasil
password_hash()
?
Jangan-jangan kamu menyimpan hash dari metode lain (sepertimd5()
) tetapi mencoba memverifikasinya denganpassword_verify()
. Tentu saja itu nggak akan cocok. -
Apakah
$plain_password
Benar-Benar diambil dari Input User?
Mungkin ada kesalahan penamaan variabel atau typo dalam mengekstrak data dari$_POST
. -
Periksa Cost Factor (Jika Tidak Sengaja Berubah)
Pada beberapa kasus, developer iseng mengubah cost factor tanpa menyadari dampaknya. Akibatnya hash yang dihasilkan bisa beda dengan hash lama.
Mengamankan Aplikasi dengan Pendekatan Menyeluruh
Menggunakan password_verify()
dan password_hash()
adalah langkah penting dalam mengamankan password pengguna, tapi jangan lupa
bahwa keamanan aplikasi merupakan usaha menyeluruh. Kamu juga harus
mempertimbangkan:
- Validasi Input: Pastikan input lain seperti username, email, dan token juga di-filter atau di-sanitasi dengan tepat.
- Penggunaan HTTPS: Seperti yang dibahas sebelumnya, selalu gunakan protokol yang terenkripsi untuk mencegah man-in-the-middle attack.
-
Session Management: Gunakan
session_regenerate_id()
setelah login untuk mencegah session fixation, dan atur session timeout yang wajar. -
Database Security: Terapkan prepared statements
untuk menghindari SQL injection. Selalu gunakan
PDO
ataumysqli
dengan parameter binding. - Limit Login Attempts: Pertimbangkan untuk membatasi jumlah percobaan login dalam jangka waktu tertentu, sehingga serangan brute force jadi lebih sulit.
Oke, sejauh ini kita sudah membahas panjang lebar tentang fungsi
password_verify()
di PHP dan bagaimana cara memanfaatkannya
dalam sistem login, keamanan aplikasi, serta beberapa skenario khusus
seperti migrasi hashing dan MFA. Intinya, fungsi ini adalah salah satu
elemen penting dalam menjaga kerahasiaan password pengguna.
password_verify()
bekerja dengan mencocokkan password
mentah yang diinput user dengan hash yang disimpan di database,
memastikan hanya user dengan password benar yang bisa mengakses akun.
Kenapa kita lebih suka password_hash()
dan
password_verify()
dibanding metode hashing lama?
Karena keduanya udah dirancang mengikuti praktik keamanan modern,
termasuk penggunaan salt otomatis dan opsi untuk menyesuaikan
cost factor. Seiring bertambahnya kemampuan komputasi,
kita bisa menyesuaikan cost factor agar hashing password
tetap sulit di-brute force tapi tetap feasibel untuk dijalankan
di server produksi.
Pastinya, keamanan password bukan satu-satunya hal yang perlu kita
perhatikan dalam aplikasi web. Namun, memulai dari proteksi password
yang baik adalah fundamental. Dengan memadukan
password_verify()
dan password_hash()
bersama dengan HTTPS, validasi input, manajemen session,
dan praktik penulisan kode yang aman, kita bisa menciptakan
fondasi kokoh untuk melindungi data pengguna.
Jadi, buat kamu yang lagi membangun sistem login atau sedang
meningkatkan keamanan aplikasi, jangan ragu untuk menjadikan
password_verify()
sebagai bagian integral.
Tinggal panggil dua baris kode, eh, sistem keamanan password
udah lebih robust daripada mengandalkan hashing konvensional.
Nggak perlu lagi pusing soal salt, algoritma, dan lain-lain,
karena PHP sudah meng-handle urusan itu dengan baik.
Selamat mencoba, dan semoga bermanfaat!
Baca Juga :