Kebelakangan ini saya cuba melaksanakan keselamatan saya sendiri pada skrip log masuk yang saya temui di internet. Selepas bertungkus-lumus belajar cara membuat skrip saya sendiri untuk menjana garam untuk setiap pengguna, saya terjumpa password_hash
.
Apa yang saya faham (berdasarkan pembacaan halaman ini), apabila anda menggunakan password_hash
garam sudah dijana dalam talian. Ini adalah benar?
Persoalan saya yang lain, bukankah bijak jika ada 2 jenis garam? Satu terus dalam fail dan satu dalam pangkalan data? Dengan cara itu, jika seseorang merosakkan garam dalam pangkalan data, anda masih boleh menyimpan garam terus dalam fail? Saya membaca di sini bahawa menyimpan garam bukanlah idea yang bijak, tetapi ia sentiasa mengelirukan saya apa yang orang maksudkan dengan itu.
Ya, anda faham dengan betul, fungsi password_hash() akan menjana garam dengan sendirinya dan memasukkannya ke dalam nilai cincang yang dihasilkan. Adalah betul untuk menyimpan garam dalam pangkalan data, walaupun ia diketahui melakukan tugasnya.
Garam kedua yang anda nyatakan (yang disimpan dalam fail) sebenarnya adalah kunci lada atau bahagian pelayan. Jika anda menambahnya sebelum pencincang (sama seperti garam), maka anda menambah lada. Terdapat cara yang lebih baik walaupun, anda boleh mengira cincang dahulu dan kemudian menyulitkan (kedua-dua cara) cincang menggunakan kunci sisi pelayan. Ini membolehkan anda menukar kunci jika perlu.
Bertentangan dengan garam, kunci ini harus dirahsiakan. Orang sering mengelirukan dan cuba menyembunyikan garam, tetapi lebih baik membiarkan garam melakukan tugasnya dan menambah rahsia dengan kunci.
Adalah disyorkan untuk menggunakan
password_hash
untuk menyimpan kata laluan. Jangan pisahkan mereka ke dalam pangkalan data dan fail.Katakan kita mempunyai input berikut:
Anda terlebih dahulu mencincang kata laluan dengan melakukan perkara berikut:
Kemudian lihat output:
Seperti yang anda lihat, ia dicincang. (Saya andaikan anda mengikuti langkah-langkah ini).
Sekarang anda menyimpan kata laluan cincang ini dalam pangkalan data anda, pastikan lajur kata laluan anda cukup besar untuk menampung nilai cincang (sekurang-kurangnya 60 aksara atau lebih lama). Apabila pengguna meminta untuk log masuk, anda boleh menyemak kata laluan yang dimasukkan menggunakan cincang dalam pangkalan data, seperti ini:
Rujukan Rasmi