Keamanan Password
Password adalah kunci utama keamanan aplikasi web. Jika password user bocor, seluruh data mereka dalam bahaya. Di bab ini, kamu akan belajar cara menyimpan dan memverifikasi password dengan benar menggunakan standar industri.
Kenapa Tidak Boleh Simpan Plain Text?
Dampak menyimpan password plain text:
- Database bocor → hacker dapat semua password
- User sering pakai password sama di banyak situs → akun lain ikut terancam
- Karyawan/admin database bisa membaca password user
- Melanggar regulasi (GDPR, dll) → denda besar
Solusi: Hashing
Hashing mengubah password menjadi string acak yang tidak bisa dikembalikan ke bentuk aslinya:
Satu arah — tidak ada cara mengubah hash kembali menjadi "rahasia123". Inilah yang membuat hashing aman.
password_hash() — Membuat Hash
Kenapa Hasilnya Selalu Berbeda?password_hash() otomatis menambahkan salt (data acak) yang unik setiap kali. Ini mencegah serangan rainbow table — dimana hacker punya daftar hash yang sudah dihitung sebelumnya. Dengan salt yang berbeda, hash password yang sama menghasilkan output berbeda.
Anatomi Hash bcrypt
password_verify() — Memverifikasi Password
Saat user login, jangan hash ulang dan bandingkan string — gunakan password_verify():
Implementasi Lengkap: Registrasi & Login
Registrasi (Simpan Password)
Login (Verifikasi Password)
password_needs_rehash() — Upgrade Hash
Algoritma hashing berkembang. password_needs_rehash() mengecek apakah hash lama perlu di-upgrade:
Kebijakan Password yang Baik
Rangkuman
[!IMPORTANT] Checklist Keamanan Password
- ✅ Selalu hash password dengan
password_hash(PASSWORD_DEFAULT)- ✅ Selalu verifikasi dengan
password_verify()- ✅ Jangan pernah simpan password plain text
- ✅ Jangan pernah buat hash sendiri (MD5, SHA1 = TIDAK AMAN)
- ✅ Cek
password_needs_rehash()saat login untuk upgrade otomatis- ✅ Pesan error login: "username atau password salah" (jangan spesifik)
- ✅ Terapkan kebijakan password minimal (panjang, kompleksitas)
Latihan
- Update project Toko Online: ganti penyimpanan password (jika masih plain text) ke
password_hash() - Buat fungsi
validasiKekuatanPassword()dan tampilkan feedback real-time di form registrasi - Implementasikan
password_needs_rehash()di flow login
Selanjutnya
Password sudah aman! Lanjut ke Validasi & Sanitasi Input → untuk melindungi aplikasi dari serangan XSS dan injection.