Anda sebagai pengguna tidak tahu bagaimana kata sandi dienkripsi (sebenarnya tidak dienkripsi sama sekali, tetapi di-hash).
Anda cukup memasukkan kata sandi, dan MySQL dapat melakukan hashing yang sama seperti pada kata sandi asli dan membandingkannya dengan apa yang disimpan. Jika Anda melewati versi hash, seluruh manfaat hashing hilang:Jika seseorang mendapatkan hash dari server, mereka dapat menggunakannya untuk masuk seolah-olah itu adalah kata sandi normal. Hash tersebut kemudian menjadi kata sandi.
Manfaat tambahannya adalah MySQL, karena memiliki kata sandi asli, dapat melakukan hash ulang dengan algoritma yang lebih baik, menambahkan sedikit garam dan menyimpan versi yang ditingkatkan itu. Jika tidak pernah mendapatkan yang asli, itu tidak bisa dilakukan. Fungsi sandi PHP
mendukung ini juga. Anda dapat memeriksa dengan password_needs_rehash
jika kata sandi yang di-hash masih di-hash dengan benar, dan perbarui database Anda jika tidak.
Jadi, untuk keamanan, Anda perlu mengambil tindakan lain. Ini setidaknya:
- Simpan kata sandi dalam file sertakan yang berada di luar akar dokumen. Dengan begitu, tidak ada yang bisa membuka file itu secara langsung.
- Anda dapat mencegah file penyertaan dibuka tanpa disertakan (misalnya dengan memeriksa definisi yang ditetapkan di index.php). Itu bagus, tetapi jika PHP gagal karena kesalahan konfigurasi, orang dapat menelusuri sumber file, jadi ikuti aturan sebelumnya.
- Selalu buat pengguna database khusus. Jangan gunakan
root
. Berikan pengguna ini hak yang cukup untuk mengoperasikan database, tetapi tidak lebih. Tidak ada hak untuk menjatuhkan tabel misalnya. - Selalu berikan kata sandi unik kepada pengguna tersebut. Anda tidak perlu mengingat kata sandi ini. Buat saja sampah acak dengan banyak karakter.
- Ubah sandi secara berkala. Mungkin Anda bahkan bisa membuat skrip itu dan menyimpan kata sandi yang diperbarui di konfigurasi.