အသုံးပြုသူ authentication system ကိုတည်ဆောက်ရာတွင်လုံခြုံစိတ်ချရသောစကားဝှက်များကို developer များအာရုံစိုက်ရမည်ဟူသောပြ issue နာဖြစ်သည်။ စကားဝှက်များကိုမမှန်မကန်နှင့်နှိုင်းယှဉ်ခြင်းကစနစ်ကိုအချိန်ကြာမြင့်စွာတိုက်ခိုက်မှုများကဲ့သို့သောလုံခြုံရေးခြိမ်းခြောက်မှုများကိုခံယူနိုင်သည်။ PHP သည် password စစ်ဆေးခြင်းကိုလုံလုံခြုံခြုံကိုင်တွယ်ရန်ကူညီနိုင်သည့် built-in function အချို့ကိုထောက်ပံ့ပေးသည်။ သူတို့တွင် crypt () နှင့် hash_equals () ပေါင်းစပ်မှုပေါင်းစပ်ခြင်းသည်လုံခြုံစိတ်ချရသောနည်းလမ်းဖြစ်သည်။
Crypt () သည် PHP ၏စာ ဝှက် ခြင်းလုပ်ငန်းတစ်ခုဖြစ်သည် ။ ၎င်း၏ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
string crypt(string $string, string $salt)
ဆား parameter သည် encryption algorithm နှင့်၎င်း၏အပြုအမူဆုံးဖြတ်သည်။ မျက်မှောက်ခေတ်လျှောက်လွှာများအတွက် BCRYPT အကြံပြုသည်။ သင့်လျော်သော ဆားကို အောက်ပါနည်းလမ်းများဖြင့်အလိုအလျောက်ထုတ်လုပ်နိုင်သည်။
$salt = '$2y$10$' . substr(strtr(base64_encode(random_bytes(16)), '+', '.'), 0, 22);
$hash = crypt('mypassword', $salt);
အစပြုသူများသည်စကားဝှက်များကိုအတည်ပြုရန်အောက်ပါကုဒ်ကိုရေးလိမ့်မည်။
if (crypt($inputPassword, $storedHash) == $storedHash) {
// အောင်မြင်စွာဝင်ပါ
}
၎င်းသည် function တွင်ဖြစ်နိုင်ခြေရှိပုံရသည်, သို့သော်ကြီးမားသောလုံခြုံရေးအန္တရာယ်ရှိသည် ။ Attacker သည်ပရိုဂရမ်တုန့်ပြန်မှုအချိန်အနည်းငယ်ကွာခြားမှုကိုတိုင်းတာခြင်းအားဖြင့်မှန်ကန်သောစကားဝှက် hash ကိုတဖြည်းဖြည်းခန့်မှန်းနိုင်သည်။
အချိန်ကြာမြင့်စွာတိုက်ခိုက်မှုပြ problem နာကိုဖြေရှင်းရန် PHP သည် hash_equals () function ကို 5.6 ကတည်းက 5.6 ကတည်းက 5.6 ကတည်းက 5.6 ကတည်းက
bool hash_equals(string $known_string, string $user_string)
၎င်းသည်အမြဲတမ်းအချိန် algorithm ကိုအသုံးပြုသည်။ string ၏ပါဝင်မှုကို အခြေခံ. ကြိုတင်မပြန်ပါ။
<?php
// ကျွန်ုပ်တို့သည်စာဝှက်ထားတဲ့စကားဝှက် hash ကိုဒေတာဘေ့စ်ကနေရမယ်ဆိုပါစို့
$storedHash = '$2y$10$9YzyYtVht3tcGEn.7PiF2OlRM0HDTrM7Z5D.yPi8hdm0fJeFVKH4K'; // အပေါ်မူတည်သည် crypt() ဖြစ်သော bcrypt ဟက်ရှုပ်
$inputPassword = $_POST['password'] ?? '';
// အသုံးပြု crypt() 对အသုံးပြု户输入的密码进行ဟက်ရှုပ်,使အသုံးပြု存储ဟက်ရှုပ်作为 salt
$inputHash = crypt($inputPassword, $storedHash);
// 使အသုံးပြု hash_equals() ဘေးကင်းလုံခြုံရေးနှိုင်းယှဉ်
if (hash_equals($storedHash, $inputHash)) {
echo "အောင်မြင်စွာဝင်ပါ!";
} else {
echo "စကားဝှက်!";
}
?>
Crypt () သည်လုံခြုံမှုရှိသော်လည်း PHP အရာရှိ PHP မှတာဝန်ရှိသူသည် algorithm ရွေးချယ်မှုနှင့်လုံခြုံရေးနှိုင်းယှဉ်မှုဖြစ်စဉ်ကိုပိုမိုလွယ်ကူစွာပိုမိုလွယ်ကူစေရန်အတွက် Php Password_hash () () () passwordy) ကို အသုံးပြု. PHP အရာရှိကအကြံပြုသည်။ ဥပမာအားဖြင့်:
// 创建密码ဟက်ရှုပ်
$hash = password_hash('mypassword', PASSWORD_BCRYPT);
// စကားဝှက်ကိုစစ်ဆေးပါ
if (password_verify($inputPassword, $hash)) {
echo "အတည်ပြုအတည်ပြု";
}
သို့သော်အချို့သောအခြေအနေများတွင် (ထိုကဲ့သို့သောစနစ်များကိုထိန်းသိမ်းခြင်းသို့မဟုတ်အထူးလိုအပ်ချက်များရှိခြင်းကဲ့သို့သောနေရာများ) သည် crypt () နှင့် hash_equals () ပေါင်းစပ်ခြင်းသည်လက်ခံနိုင်ဖွယ်ကောင်းပြီးလုံခြုံစိတ်ချရသောဖြေရှင်းနည်းတစ်ခုဖြစ်သည်။
== သို့မဟုတ် === ကိုမသုံးပါနှင့် password hashes ကိုနှိုင်းယှဉ်ခြင်း,
Crypt () hash password ကိုသုံးသောအခါ, သင်သည် ဆား နှင့် algorithm ကိုမှန်ကန်စွာရွေးချယ်ရမည် (BCRYPT အကြံပြုသည်);
အချိန်ဇယားများကိုတားဆီးရန် Hash_equals () ကို အသုံးပြုပါ။
တိကျသောအကြောင်းပြချက်မရှိပါက password_hash () နှင့် password_verifies () ကို အသုံးပြုရန်အကြံပြုသည်။
Security သည်ရွေးချယ်စရာတစ်ခုမဟုတ်ပါ။ အသုံးပြုသူစကားဝှက်များကိုထုတ်ယူသောအခါလိုအပ်ချက်တစ်ခုမဟုတ်ပါ။ မှန်ကန်သောချဉ်းကပ်မှုသည်အသုံးပြုသူသီးသန့်တည်ရှိမှုကိုသာအကာအကွယ်ပေးနိုင်ရုံသာမကစနစ်တစ်ခုလုံးကိုတိုက်ခိုက်ရန်ကိုလည်းတိုးတက်စေသည်။