Membangun Sistem Autentikasi Pengguna PHP dan MySQL
Keamanan aplikasi web adalah kunci. Sistem autentikasi yang kuat melindungi data pengguna dan menjaga integritas platform Anda. Panduan ini akan memandu Anda melalui proses membangun sistem autentikasi yang handal menggunakan PHP dan MySQL, mencakup perancangan database, implementasi registrasi dan login pengguna, pengelolaan sesi, serta penerapan Role-Based Access Control (RBAC) untuk keamanan tingkat lanjut. Pelajari langkah demi langkah bagaimana membangun sistem yang aman dan efisien.
Dari perancangan skema database relasional yang terstruktur hingga implementasi teknik pengamanan password yang canggih seperti bcrypt, panduan ini akan memberikan pemahaman komprehensif tentang setiap aspek pengembangan sistem autentikasi. Anda akan mempelajari cara menangani validasi input pengguna, mencegah serangan umum seperti SQL injection dan XSS, serta mengelola sesi pengguna dengan aman. Dengan mengikuti langkah-langkah praktis dan contoh kode yang diberikan, Anda akan mampu membangun sistem autentikasi yang handal dan melindungi aplikasi web Anda dari ancaman keamanan.
Perancangan Database MySQL

Membangun sistem autentikasi yang handal bergantung pada perancangan database yang terstruktur dan efisien. Database MySQL, dengan kemampuannya yang terbukti, menjadi pilihan yang tepat untuk menyimpan dan mengelola informasi pengguna secara aman. Perancangan yang tepat akan memastikan keamanan data, performa yang optimal, dan skalabilitas sistem di masa mendatang. Berikut detail perancangan database untuk sistem autentikasi pengguna.
Skema Database Relasional untuk Autentikasi Pengguna
Sistem autentikasi ini akan menggunakan skema relasional yang sederhana namun efektif. Pusat dari sistem ini adalah tabel users
yang menyimpan informasi penting setiap pengguna. Tabel ini dirancang untuk menghindari redundansi data dan memudahkan pengelolaan informasi pengguna.
Definisi Kolom Tabel Pengguna
Tabel users
akan memiliki beberapa kolom penting untuk menyimpan data pengguna. Pemilihan tipe data yang tepat sangat krusial untuk memastikan integritas dan efisiensi database.
Kolom | Tipe Data | Keterangan | Keterbatasan |
---|---|---|---|
id |
INT UNSIGNED AUTO_INCREMENT |
ID unik untuk setiap pengguna | Primary Key |
username |
VARCHAR(255) |
Nama pengguna untuk login | UNIQUE, NOT NULL |
password |
VARCHAR(255) |
Kata sandi pengguna (disarankan menggunakan hashing yang aman seperti bcrypt) | NOT NULL |
email |
VARCHAR(255) |
Alamat email pengguna | UNIQUE, NOT NULL |
role |
ENUM('admin', 'user') |
Level akses pengguna (admin atau user) | NOT NULL |
Query SQL untuk Membuat Tabel
Berikut query SQL untuk membuat tabel users
di database MySQL:
CREATE TABLE users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
role ENUM('admin', 'user') NOT NULL
);
Ringkasan Skema Database
Tabel di atas merangkum skema database yang telah dirancang. Desain ini menekankan pada kesederhanaan dan efisiensi, memungkinkan integrasi yang mudah dengan sistem autentikasi PHP.
Implementasi Registrasi Pengguna dengan PHP
Membangun sistem registrasi pengguna yang aman dan efisien merupakan langkah krusial dalam pengembangan aplikasi web. Proses ini melibatkan validasi data input, pengamanan kata sandi, dan penyimpanan data pengguna ke database. Berikut ini langkah-langkah implementasi registrasi pengguna dengan PHP dan MySQL, dengan fokus pada keamanan dan praktik terbaik.
Fungsi Pemrosesan Pendaftaran Pengguna
Fungsi PHP untuk memproses pendaftaran pengguna baru akan bertindak sebagai jantung sistem registrasi. Fungsi ini akan menerima data input dari formulir registrasi, memvalidasinya, mengamankan kata sandi, dan menyimpan data ke database. Desain fungsi yang baik harus modular dan mudah dipelihara, memisahkan tugas-tugas seperti validasi, enkripsi, dan penyimpanan data ke dalam fungsi-fungsi yang lebih kecil dan terorganisir.
Validasi Data Input Pengguna
Validasi data input merupakan langkah penting untuk mencegah serangan injeksi SQL dan memastikan integritas data. Validasi harus dilakukan pada sisi klien (menggunakan JavaScript) dan sisi server (menggunakan PHP) untuk keamanan optimal. Validasi email harus memastikan format email yang benar dan mungkin memeriksa keberadaan email tersebut (untuk mencegah duplikasi). Validasi kata sandi harus memeriksa panjang minimal, kompleksitas (karakter huruf besar, huruf kecil, angka, dan simbol), dan konfirmasi kata sandi yang sesuai.
- Validasi email: Memeriksa format email menggunakan fungsi
filter_var($email, FILTER_VALIDATE_EMAIL)
dan memeriksa keunikan email di database. - Validasi kata sandi: Memeriksa panjang minimal, kompleksitas, dan konfirmasi kata sandi yang cocok.
- Validasi data lainnya: Memvalidasi semua field input lainnya sesuai dengan kebutuhan aplikasi, seperti nama pengguna, nama lengkap, dll.
Pengamanan Kata Sandi dengan Hashing (Bcrypt)
Jangan pernah menyimpan kata sandi pengguna dalam bentuk plain text. Gunakan algoritma hashing yang kuat seperti bcrypt untuk mengamankan kata sandi. Bcrypt adalah algoritma one-way hashing yang menghasilkan hash yang unik dan sulit untuk dibalik. Fungsi password_hash()
dalam PHP menyediakan cara mudah untuk menggunakan bcrypt.
Contoh penggunaan password_hash()
:
$hashedPassword = password_hash($password, PASSWORD_BCRYPT);
Penyimpanan Data Pengguna ke Database MySQL
Setelah data valid dan kata sandi di-hash, data pengguna dapat disimpan ke database MySQL. Gunakan prepared statements untuk mencegah serangan injeksi SQL. Prepared statements memungkinkan Anda untuk memisahkan query SQL dari data, sehingga mencegah penyerang menyuntikkan kode berbahaya ke dalam query.
Contoh penggunaan prepared statement:
$stmt = $conn->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $username, $email, $hashedPassword);
$stmt->execute();
Menampilkan Pesan Sukses atau Error
Setelah proses registrasi selesai, penting untuk memberikan umpan balik kepada pengguna. Tampilkan pesan sukses jika registrasi berhasil, atau pesan error yang informatif jika terjadi kesalahan. Pesan error harus menjelaskan penyebab kesalahan secara spesifik, tanpa memberikan informasi sensitif yang dapat dieksploitasi oleh penyerang.
Contoh menampilkan pesan sukses/error:
if ($stmt->execute())
echo "Registrasi berhasil!";
else
echo "Registrasi gagal: " . $stmt->error;
Implementasi Login Pengguna dengan PHP
Setelah membangun basis data dan menyiapkan struktur tabel pengguna, langkah selanjutnya adalah mengimplementasikan sistem login. Proses ini melibatkan pembuatan fungsi PHP untuk memverifikasi kredensial pengguna dan memulai sesi setelah login berhasil. Keamanan adalah prioritas utama, oleh karena itu, penanganan potensi kerentanan sangat penting untuk dipertimbangkan.
Berikut ini akan dijelaskan secara detail bagaimana membangun fungsi login yang aman dan efisien, termasuk penanganan error dan strategi mitigasi terhadap serangan keamanan umum.
Fungsi PHP untuk Memproses Login Pengguna
Fungsi PHP yang akan dibuat akan menerima username dan password sebagai input, kemudian melakukan verifikasi terhadap database MySQL. Fungsi ini akan mengembalikan nilai boolean (benar/salah) untuk mengindikasikan keberhasilan login. Selain itu, fungsi ini juga akan menangani potensi error, seperti username atau password yang salah, atau error koneksi database.
Desain fungsi ini harus menekankan pada efisiensi dan kemudahan pemeliharaan. Penggunaan prepared statement sangat direkomendasikan untuk mencegah SQL injection.
Verifikasi Kredensial Pengguna terhadap Database
Verifikasi kredensial dilakukan dengan mengirimkan query SQL ke database MySQL. Query ini akan mencari pengguna dengan username yang sesuai. Jika ditemukan, password yang diinput pengguna akan dibandingkan dengan password yang tersimpan di database. Perlu diingat bahwa password tidak boleh disimpan dalam bentuk plain text, melainkan harus di-hash menggunakan algoritma yang aman seperti bcrypt atau Argon2.
Proses perbandingan password dilakukan dengan membandingkan hash password yang diinput dengan hash password yang tersimpan di database. Jika kedua hash sama, maka login berhasil. Proses ini memastikan keamanan data, karena bahkan jika database diretas, password pengguna tetap aman.
Memulai Sesi Setelah Login Berhasil
Setelah verifikasi kredensial berhasil, sesi pengguna perlu dimulai. Sesi digunakan untuk menyimpan informasi tentang pengguna yang sedang login, seperti ID pengguna dan username. Informasi ini kemudian dapat digunakan untuk mengakses fitur-fitur yang hanya dapat diakses oleh pengguna yang telah login.
PHP menyediakan fungsi session_start()
untuk memulai sesi. Informasi sesi disimpan di sisi server dan diidentifikasi melalui cookie yang dikirimkan ke browser pengguna. Penggunaan session_regenerate_id()
setelah login direkomendasikan untuk meningkatkan keamanan.
Potensi Kerentanan Keamanan dan Solusinya
Beberapa potensi kerentanan keamanan dalam proses login meliputi SQL injection, cross-site scripting (XSS), dan brute-force attack. SQL injection dapat dicegah dengan menggunakan prepared statement. XSS dapat dicegah dengan melakukan sanitizing input pengguna. Brute-force attack dapat diatasi dengan membatasi jumlah percobaan login dan menambahkan fitur CAPTCHA.
- SQL Injection: Gunakan prepared statements atau parameterized queries untuk mencegah serangan SQL injection.
- Cross-Site Scripting (XSS): Sanitasi semua input pengguna sebelum ditampilkan di halaman web. Gunakan fungsi escape yang sesuai untuk mencegah skrip berbahaya.
- Brute-Force Attack: Implementasikan mekanisme rate limiting untuk membatasi jumlah percobaan login dalam jangka waktu tertentu. Pertimbangkan penggunaan CAPTCHA untuk menambah lapisan keamanan.
Contoh Kode PHP untuk Proses Login
Berikut contoh kode PHP sederhana untuk proses login. Kode ini menggunakan prepared statement untuk mencegah SQL injection dan bcrypt untuk hashing password. Ingatlah untuk mengganti placeholder dengan detail database Anda sendiri.
prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows == 1)
$user = $result->fetch_assoc();
if (password_verify($password, $user['password']))
session_start();
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
header("Location: dashboard.php");
exit();
else
echo "Password salah.";
else
echo "Username tidak ditemukan.";
$stmt->close();
$conn->close();
?>
Pengelolaan Sesi Pengguna
Setelah berhasil mengotentikasi pengguna, langkah selanjutnya adalah mengelola sesi pengguna. Pengelolaan sesi yang efektif dan aman sangat krusial untuk menjaga keamanan aplikasi dan memastikan hanya pengguna yang berwenang yang dapat mengakses sumber daya yang dilindungi. Sistem ini akan mencatat status login pengguna dan memungkinkan akses ke area tertentu berdasarkan status tersebut. Berikut penjelasan lebih lanjut mengenai implementasinya dalam sistem autentikasi berbasis PHP dan MySQL.
Mekanisme sesi umumnya bekerja dengan menyimpan ID pengguna dan data relevan lainnya dalam sebuah variabel sesi pada server. Variabel ini dikaitkan dengan cookie yang dikirimkan ke browser pengguna. Setiap permintaan selanjutnya dari pengguna akan menyertakan cookie ini, sehingga server dapat mengidentifikasi pengguna dan mempertahankan status loginnya. Keberadaan sesi memungkinkan aplikasi untuk mengingat informasi pengguna tanpa harus meminta login berulang kali.
Fungsi Pemeriksaan Login Pengguna
Fungsi PHP berikut memeriksa apakah pengguna sudah login dengan memeriksa keberadaan variabel sesi yang telah ditentukan sebelumnya. Fungsi ini akan mengembalikan nilai boolean (benar atau salah) yang mengindikasikan status login pengguna.
Fungsi isLoggedIn()
sederhana ini memeriksa apakah variabel sesi $_SESSION['user_id']
telah diset. Jika variabel ini ada, berarti pengguna telah login dan fungsi akan mengembalikan nilai true
. Sebaliknya, jika variabel tidak ada, fungsi akan mengembalikan false
, mengindikasikan pengguna belum login.
Contoh Penggunaan Fungsi isLoggedIn()
Berikut contoh bagaimana fungsi isLoggedIn()
digunakan dalam sebuah halaman web. Halaman ini akan menampilkan konten yang berbeda tergantung status login pengguna.
"; Anda telah login. "; "; ?>
Selamat datang, " . $_SESSION['username'] . "!
echo "
echo "Logout";
else
echo "Anda belum login.
echo "Login";
Kode di atas pertama-tama memulai sesi menggunakan session_start()
. Kemudian, ia memanggil fungsi isLoggedIn()
. Jika pengguna telah login, halaman akan menampilkan pesan selamat datang dan tautan logout. Jika belum login, halaman akan menampilkan pesan yang meminta pengguna untuk login.
Logout Pengguna dan Penghapusan Sesi
Proses logout melibatkan penghapusan variabel sesi dan cookie yang terkait dengan sesi pengguna. Ini memastikan pengguna tidak lagi dapat mengakses sumber daya yang dilindungi setelah logout. Berikut contoh sederhana fungsi logout:
Kode di atas pertama-tama memulai sesi, kemudian menggunakan session_unset()
untuk menghapus semua variabel sesi, dan session_destroy()
untuk menghancurkan sesi itu sendiri. Akhirnya, pengguna diarahkan ke halaman login.
Pentingnya Pengelolaan Sesi yang Aman
Pengelolaan sesi yang aman sangat penting untuk mencegah akses yang tidak sah ke aplikasi. Penggunaan cookie yang aman, seperti pengaturan
HttpOnly
danSecure
, serta regenerasi ID sesi secara berkala, dapat membantu mencegah serangan seperti pembajakan sesi dan serangan CSRF. Selain itu, penting juga untuk menyimpan data sesi dengan aman di server dan membatasi waktu hidup sesi untuk meminimalkan risiko jika terjadi kebocoran data. Perlu diingat bahwa kerentanan dalam pengelolaan sesi dapat mengakibatkan akses ilegal ke data sensitif pengguna dan kompromi keamanan aplikasi secara keseluruhan.
Implementasi Role-Based Access Control (RBAC)

Setelah membangun sistem autentikasi yang handal, langkah selanjutnya adalah mengontrol akses pengguna berdasarkan peran mereka. Role-Based Access Control (RBAC) adalah solusi yang efektif untuk mengelola izin akses dalam aplikasi web. Dengan RBAC, kita dapat mendefinisikan peran-peran pengguna (misalnya, admin, editor, penulis, pembaca) dan menetapkan izin akses spesifik untuk setiap peran. Ini meningkatkan keamanan dan efisiensi manajemen akses pengguna.
Konsep dan Manfaat RBAC
RBAC adalah model kontrol akses yang berfokus pada peran pengguna. Alih-alih memberikan izin akses secara individual kepada setiap pengguna, RBAC mengelompokkan pengguna berdasarkan peran mereka dan menetapkan izin akses kepada peran tersebut. Manfaat utama RBAC termasuk: peningkatan keamanan (karena mengurangi jumlah izin akses yang perlu dikelola), efisiensi administrasi (karena perubahan izin akses hanya perlu dilakukan pada level peran), dan skalabilitas (karena mudah untuk menambahkan pengguna dan peran baru).
Implementasi RBAC dalam Sistem
Implementasi RBAC melibatkan beberapa langkah kunci. Pertama, kita perlu mendefinisikan peran-peran yang relevan dalam sistem. Misalnya, kita bisa memiliki peran “administrator”, “editor”, dan “penulis”. Setiap peran akan memiliki sekumpulan izin akses yang berbeda. Kedua, kita perlu membuat tabel database untuk menyimpan informasi peran dan izin akses. Tabel ini biasanya akan berisi kolom untuk ID peran, nama peran, dan daftar izin akses.
Berikut contoh skema tabel database untuk implementasi RBAC:
Kolom | Tipe Data | Deskripsi |
---|---|---|
role_id | INT (primary key) | ID unik untuk setiap peran |
role_name | VARCHAR(255) | Nama peran (misalnya, administrator, editor) |
permissions | TEXT | Daftar izin akses, bisa berupa JSON atau string yang dipisahkan koma |
Fungsi PHP untuk Memeriksa Izin Akses
Fungsi PHP berikut memeriksa apakah pengguna memiliki izin akses tertentu sebelum mengakses halaman tertentu. Fungsi ini menerima peran pengguna dan izin yang dibutuhkan sebagai input dan mengembalikan nilai boolean (true jika pengguna memiliki izin, false jika tidak).
Contoh fungsi PHP:
<?php
function checkPermission($userRole, $requiredPermission)
// Ambil daftar izin akses untuk peran pengguna dari database
$permissions = getPermissions($userRole);
// Periksa apakah izin yang dibutuhkan ada dalam daftar izin akses pengguna
return in_array($requiredPermission, $permissions);
function getPermissions($userRole)
//Query database untuk mengambil permission berdasarkan user role.
// ...
return $permissions;
?>
Langkah-Langkah Implementasi RBAC
- Definisikan Peran dan Izin Akses: Identifikasi peran-peran pengguna dalam sistem dan tentukan izin akses yang sesuai untuk setiap peran.
- Buat Tabel Database: Buat tabel database untuk menyimpan informasi peran dan izin akses.
- Implementasikan Fungsi Pemeriksaan Izin: Buat fungsi PHP untuk memeriksa apakah pengguna memiliki izin akses yang dibutuhkan sebelum mengakses halaman tertentu.
- Integrasikan dengan Sistem Autentikasi: Integrasikan fungsi pemeriksaan izin dengan sistem autentikasi yang sudah ada.
- Pengujian: Lakukan pengujian menyeluruh untuk memastikan bahwa sistem RBAC berfungsi dengan benar.
Ilustrasi Alur Kerja RBAC
Berikut ilustrasi alur kerja RBAC. Pengguna melakukan login dan sistem mengidentifikasi perannya. Ketika pengguna mencoba mengakses suatu halaman, sistem memeriksa apakah peran pengguna memiliki izin akses untuk halaman tersebut. Jika ya, pengguna diizinkan mengakses halaman. Jika tidak, pengguna akan mendapatkan pesan error atau diarahkan ke halaman lain.
Pseudocode:
1. User login
2. Sistem mendapatkan role user dari database
3. User request page X
4. Sistem memeriksa permission page X
5. Jika role user memiliki permission, akses diijinkan
6. Jika tidak, akses ditolak dan tampilkan pesan error
Keamanan Aplikasi
Sistem autentikasi yang handal tak hanya memverifikasi identitas pengguna, tetapi juga melindungi aplikasi dari berbagai ancaman keamanan. Kerentanan keamanan dalam sistem autentikasi dapat berdampak serius, mulai dari pencurian data hingga pengambilalihan seluruh sistem. Oleh karena itu, membangun sistem autentikasi yang aman merupakan prioritas utama dalam pengembangan aplikasi.
Penting untuk mengidentifikasi dan mengatasi potensi kerentanan sejak tahap perencanaan. Pendekatan proaktif akan meminimalisir risiko dan memastikan integritas data serta keamanan pengguna.
Mencegah SQL Injection
SQL Injection merupakan serangan yang memanfaatkan celah keamanan dalam query database untuk mengeksekusi kode berbahaya. Serangan ini dapat digunakan untuk mengakses, memodifikasi, atau menghapus data sensitif. Untuk mencegah SQL Injection, gunakan parameterized queries atau prepared statements. Metode ini memisahkan data pengguna dari query SQL, sehingga mencegah kode berbahaya dieksekusi. Hindari juga penggunaan fungsi `mysql_*` yang sudah usang dan beralih ke library database yang lebih aman seperti PDO atau MySQLi yang menyediakan fitur prepared statement.
Mencegah Cross-Site Scripting (XSS)
Cross-Site Scripting (XSS) memungkinkan penyerang untuk menyuntikkan skrip berbahaya ke dalam halaman web yang dilihat oleh pengguna lain. Skrip ini dapat mencuri cookie sesi, mengarahkan pengguna ke situs web palsu (phishing), atau melakukan tindakan berbahaya lainnya. Untuk mencegah XSS, lakukan sanitasi input pengguna dengan hati-hati. Escaping karakter khusus seperti `<`, `>`, `&`, dan `”` adalah langkah penting. Gunakan fungsi built-in yang disediakan oleh framework atau library PHP yang Anda gunakan untuk melakukan escaping secara aman. Selain itu, terapkan kebijakan keamanan konten (Content Security Policy atau CSP) untuk membatasi sumber daya yang dapat dimuat oleh browser.
Mencegah Cross-Site Request Forgery (CSRF)
Cross-Site Request Forgery (CSRF) adalah serangan yang memaksa pengguna yang telah masuk (logged-in) untuk melakukan tindakan yang tidak diinginkan di situs web. Serangan ini biasanya dilakukan dengan menyematkan link atau form tersembunyi dalam situs web lain. Untuk mencegah CSRF, gunakan token CSRF. Token ini adalah nilai unik yang dihasilkan secara acak dan ditambahkan ke formulir. Server kemudian memverifikasi token sebelum memproses permintaan. Jika token tidak valid, permintaan akan ditolak.
Pentingnya HTTPS
HTTPS (Hypertext Transfer Protocol Secure) menggunakan enkripsi SSL/TLS untuk mengamankan koneksi antara browser dan server. Ini melindungi data yang ditransmisikan, termasuk kredensial login, dari penyadapan. Penggunaan HTTPS sangat penting untuk melindungi informasi sensitif seperti kata sandi pengguna dan mencegah serangan man-in-the-middle.
Praktik Terbaik Keamanan Sistem Autentikasi
- Gunakan kata sandi yang kuat dan unik untuk setiap akun.
- Terapkan kebijakan kata sandi yang kuat, termasuk panjang minimal, karakter khusus, dan rotasi periodik.
- Gunakan hashing yang aman seperti bcrypt atau Argon2 untuk menyimpan kata sandi. Hindari penggunaan algoritma hashing yang sudah usang seperti MD5 atau SHA1.
- Implementasikan mekanisme penguncian akun setelah beberapa upaya login yang gagal.
- Gunakan multi-faktor autentikasi (MFA) untuk meningkatkan keamanan login.
- Lakukan audit keamanan secara berkala untuk mengidentifikasi dan memperbaiki kerentanan.
- Selalu perbarui library dan framework PHP Anda ke versi terbaru untuk mendapatkan patch keamanan.
Praktik terbaik keamanan dalam membangun sistem autentikasi meliputi penggunaan parameterized queries untuk mencegah SQL injection, sanitasi input untuk mencegah XSS, token CSRF untuk mencegah CSRF, HTTPS untuk mengamankan koneksi, dan penerapan kebijakan kata sandi yang kuat serta multi-faktor autentikasi. Audit keamanan berkala juga sangat penting untuk menjaga keamanan sistem.
Ringkasan Akhir
Membangun sistem autentikasi yang aman dan efisien merupakan investasi penting bagi setiap aplikasi web. Dengan memahami prinsip-prinsip keamanan, mengimplementasikan teknik pengamanan yang tepat, dan mengikuti praktik terbaik yang telah dibahas, Anda dapat melindungi data pengguna dan memastikan integritas platform Anda. Kuasai langkah-langkah yang diuraikan dalam panduan ini untuk membangun sistem autentikasi yang handal dan andal, yang akan menjadi fondasi keamanan aplikasi web Anda.
Pertanyaan dan Jawaban
Bagaimana cara mencegah serangan brute force?
Gunakan mekanisme pembatasan percobaan login (misalnya, memblokir IP setelah beberapa percobaan gagal) dan implementasikan teknik pengamanan password yang kuat seperti bcrypt.
Apa perbedaan antara sesi dan cookie?
Sesi disimpan di server, sedangkan cookie disimpan di sisi klien (browser pengguna). Sesi lebih aman karena tidak terpapar langsung pada klien.
Bagaimana cara menangani lupa password?
Implementasikan fitur “lupa password” yang memungkinkan pengguna mereset password mereka melalui email atau metode verifikasi lainnya. Pastikan untuk mengamankan proses ini dengan baik.