Penyimpanan Kata Sandi yang Aman
Hash kata sandi dengan password_hash dan verifikasi dengan password_verify.
Penyimpanan Kata Sandi yang Aman adalah pelajaran PHP Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar PHP Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus PHP Academy mencakup 4 pelajaran total.
Jangan Pernah Menyimpan Kata Sandi dalam Teks Biasa
Menyimpan kata sandi dalam teks biasa berarti kebocoran basis data akan mengekspos kata sandi setiap pengguna. Selalu simpan hash kriptografis—idealnya bcrypt, Argon2id, atau scrypt.
password_hash()
Fungsi bawaan PHP password_hash() membuat hash aman dengan salt acak yang disertakan dalam keluarannya.
<?php
$hash = password_hash("mysecretpassword", PASSWORD_BCRYPT);
// Output: $2y$10$... (includes algorithm, cost, salt, hash)password_verify()
Verifikasi kata sandi teks biasa terhadap hash yang tersimpan.
<?php
$hash = "$2y$10$abcdef...";
$valid = password_verify("mysecretpassword", $hash);
if ($valid) {
echo "Correct password!";
}Pilihan Algoritma
PHP mendukung:
PASSWORD_BCRYPT— didukung luas, batas 72 bytePASSWORD_ARGON2I— membutuhkan banyak memori untuk serangan, PHP 7.2+PASSWORD_ARGON2ID— direkomendasikan, tahan terhadap serangan GPU, PHP 7.3+PASSWORD_DEFAULT— saat ini menggunakan bcrypt, tetapi dapat berubah pada versi PHP mendatang
Faktor Biaya
Faktor biaya mengendalikan seberapa lambat perhitungan hash dilakukan. Biaya yang lebih tinggi membuat serangan brute-force lebih lambat. Biaya bcrypt default adalah 10.
<?php
$hash = password_hash("secret", PASSWORD_BCRYPT, ["cost" => 12]);
// Cost 12 takes ~0.5s on typical hardware — acceptable for loginpassword_needs_rehash()
Setelah memperbarui PHP atau mengubah pengaturan biaya, periksa apakah hash yang ada perlu diperbarui.
<?php
if (password_verify($plain, $storedHash) &&
password_needs_rehash($storedHash, PASSWORD_DEFAULT)) {
$user->update(["password" => password_hash($plain, PASSWORD_DEFAULT)]);
}Fasad Hash Laravel
Laravel membungkus password_hash dalam fasad Hash, dengan bcrypt sebagai default.
<?php
use Illuminate\Support\Facades\Hash;
$hash = Hash::make("mysecretpassword");
$valid = Hash::check("mysecretpassword", $hash); // trueArgon2 di Laravel
Konfigurasikan Laravel agar menggunakan Argon2id di config/hashing.php.
// config/hashing.php
"driver" => "argon2id",Penanganan Salt
Fungsi hashing PHP modern secara otomatis menyertakan salt acak secara kriptografis. Jangan pernah menerapkan salt sendiri—penerapannya mudah keliru.
Pepper (Rahasia Tingkat Aplikasi)
Rahasia tambahan opsional, yaitu pepper, yang disimpan di luar basis data dapat dicampurkan sebelum hashing. Bahkan jika basis data dicuri, penyerang tidak dapat melakukan brute-force tanpa pepper tersebut.
Perbandingan dalam Waktu Konstan
password_verify() secara internal menggunakan perbandingan dalam waktu konstan untuk mencegah serangan waktu. Jangan pernah membandingkan hash dengan ==.
Ringkasan
Gunakan password_hash() dengan PASSWORD_DEFAULT atau PASSWORD_ARGON2ID. Verifikasi dengan password_verify(). Lakukan hashing ulang saat masuk jika diperlukan. Jangan pernah menyimpan teks biasa atau menggunakan MD5/SHA1 untuk kata sandi.
Pemeriksaan Cepat
Fungsi apa yang memverifikasi kata sandi terhadap hash yang dibuat PHP?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Penyimpanan Kata Sandi yang Aman” gratis?
Ya — teks lengkap “Penyimpanan Kata Sandi yang Aman” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus PHP Academy, upgrade ke CoddyKit PRO. Kursus PHP Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Penyimpanan Kata Sandi yang Aman”?
Hash kata sandi dengan password_hash dan verifikasi dengan password_verify. Kamu berlatih PHP Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai PHP Academy?
Tidak diperlukan pengalaman sebelumnya. PHP Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Penyimpanan Kata Sandi yang Aman” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran PHP Academy ini?
Ya. Setiap pelajaran PHP Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pencegahan Cross-Site Scripting (XSS)
- Injeksi SQL dan Kueri Berparameter
- Perlindungan CSRF
- Penyimpanan Kata Sandi yang Aman