Cara menggunakan fungsi password_hash PHP untuk pencincangan kata laluan dan pengesahan
P粉538462187
P粉538462187 2023-08-21 18:37:28
0
2
563
<p>Kebelakangan ini saya telah cuba melaksanakan keselamatan saya sendiri pada skrip log masuk yang saya temui di internet. Semasa cuba mempelajari cara menjana garam untuk setiap pengguna, saya terjumpa <code>password_hash</code>. </p> <p>Setakat yang saya faham (daripada membaca halaman ini), apabila menggunakan <kod>kata laluan_hash</kod>, garam sudah dijana dalam baris. Adakah ini benar? </p> <p>Saya ada soalan lain, adakah bijak menggunakan dua garam? Satu terus dalam fail dan satu dalam pangkalan data? Dengan cara ini, jika seseorang memecahkan garam dalam pangkalan data, anda masih mempunyai garam itu dalam fail. Saya pernah terbaca di sini bahawa menyimpan garam bukanlah satu idea yang bijak, tetapi saya selalu keliru dengan apa yang orang maksudkan dengan ini. </p>
P粉538462187
P粉538462187

membalas semua(2)
P粉393030917

Ya, anda memahaminya dengan betul, fungsi password_hash() akan menjana garam secara automatik dan memasukkannya ke dalam nilai cincang yang dihasilkan. Menyimpan garam dalam pangkalan data adalah betul dan akan berfungsi walaupun ia diketahui.

// 为在数据库中存储的新密码生成哈希值。
// 该函数会自动生成一个密码学安全的盐。
$hashToStoreInDb = password_hash($_POST['password'], PASSWORD_DEFAULT);

// 检查输入的登录密码的哈希值是否与存储的哈希值匹配。
// 盐和成本因素将从$existingHashFromDb中提取。
$isPasswordCorrect = password_verify($_POST['password'], $existingHashFromDb);

Garam kedua yang anda nyatakan (yang disimpan dalam fail) sebenarnya adalah "lada" atau kunci sisi pelayan. Jika anda menambahnya sebelum cincang (seperti garam), maka anda menambah sejenis lada. Walau bagaimanapun, terdapat cara yang lebih baik, anda boleh mengira cincang terlebih dahulu dan kemudian menyulitkan (penyulitan dua hala) cincang menggunakan kunci sisi pelayan. Dengan cara ini anda boleh menukar kunci jika perlu.

Berbeza dengan garam, kunci ini harus dirahsiakan. Orang ramai sering keliru dan cuba menyembunyikan garam, tetapi lebih baik biarkan garam melakukan tugasnya dan gunakan kunci untuk menambah rahsia.

P粉696146205

Menggunakan password_hash ialah cara yang disyorkan untuk menyimpan kata laluan. Jangan simpannya secara berasingan ke dalam pangkalan data dan fail.

Katakan kita mempunyai input berikut:

$password = $_POST['password'];

Cincang kata laluan pertama dengan:

$hashed_password = password_hash($password, PASSWORD_DEFAULT);

Kemudian lihat output:

var_dump($hashed_password);

Anda dapat melihat bahawa ia telah dicincang (saya andaikan anda telah menyelesaikan langkah ini).

Sekarang simpan kata laluan cincang ini ke dalam pangkalan data, 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 sama ada cincangan dalam pangkalan data sepadan dengan input kata laluan dengan:

// 查询数据库以获取用户名和密码
// ...

if(password_verify($password, $hashed_password)) {
    // 如果密码输入与数据库中的哈希密码匹配
    // 做一些操作,你懂的...登录他们。
} 

// 否则,将他们重定向回登录页面。

Rujukan Rasmi

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!