PHP တွင်အသုံးပြုသူ authentication သည်လုံခြုံစိတ်ချရသော application များတည်ဆောက်ခြင်း၏အခြေခံ link ဖြစ်သည်။ စကားဝှက်များသို့မဟုတ်တိုကင်များကိုနှိုင်းယှဉ်သောအခါအန္တရာယ်ကင်းသော string နှိုင်းယှဉ်ချက်သည်အချိန်ကိုတိုက်ခိုက်သူအားအထိခိုက်မခံသောသတင်းအချက်အလက်များကိုအများအားဖြင့်အယောင်ဆောင်နိုင်ရန်ခွင့်ပြုနိုင်သည်။ PHP သည် function hash_equals () ကိုအထူးဒီဇိုင်းပြုလုပ်ထားသည်။ ထိုသို့သောတိုက်ခိုက်မှုများကိုကာကွယ်ရန်အတွက်အထူးဒီဇိုင်းပြုလုပ်ထားသည်။
ဘုံလုံခြုံရေးအန္တရာယ်များကိုရှောင်ရှားရန်အတွက် Hash_equals () function ကိုမည်သို့အသုံးပြုရမည်ကိုဤဆောင်းပါးကမိတ်ဆက်ပေးလိမ့်မည်။
Time Attacker သည်တိုက်ခိုက်သူအားတိုက်ခိုက်သူကိုရည်ညွှန်းသည်။
ရိုးရာ string ကိုနှိုင်းယှဉ်ခြင်း function များ (ဥပမာ - == သို့မဟုတ် strcmp ) သည်ပုံမှန်အတိုင်းမအောင်မြင်သည့်အခါတတ်နိုင်သမျှအမြန်ဆုံးပြန်လာပါလိမ့်မည်။
Hash_equals () သည် PHP 5.6 နှင့်အထက်တွင်ဖော်ပြထားသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ Refens ည့်သည်များကွဲပြားမှုများကြောင့်သတင်းအချက်အလက်ယိုစိမ့်မှုများကိုရှောင်ရှားရန်ကြိုးကြိုးနှစ်ချောင်းကိုစဉ်ဆက်မပြတ်နှိုင်းယှဉ်ရန်ဒီဇိုင်းပြုလုပ်ထားသည်။
function ရှေ့ပြေးပုံစံ:
bool hash_equals(string $known_string, string $user_string)
$ Meathstring : လူသိများသော string ကို (များသောအားဖြင့်သိုလှောင်ထားသည့် hash value) ။
$ user_string : အသုံးပြုသူမှထည့်သွင်းထားသော string ကို (အတည်ပြုရန်လိုအပ်သည့်တန်ဖိုး) ။
ကြိုးနှစ်ချောင်းသည်တန်းတူဖြစ်ပါက စစ်မှန် ပါ ။
အသုံးပြုသူမှတ်ပုံတင်သည့်အခါကျွန်ုပ်တို့တွင်စကားဝှက်ကို hashed နှင့်လုံခြုံရေး algorithm ကို သုံး. သိုလှောင်ထားရှိသည်ဟုဆိုပါစို့။ 0 င်ရောက်သောအခါအသုံးပြုသူမှထည့်သွင်းထားသောစကားဝှက်ကိုအတည်ပြုရန်လိုအပ်သည်။
နမူနာကုဒ်:
<?php
// ဘယ်အချိန်မှာအသုံးပြုသူမှတ်ပုံတင်ပါ,စကားဝှက် Hash ကိုဒေတာဘေ့စ်သို့သိမ်းထားပါ
$password = 'user_password123';
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
// အသုံးပြုသူအတွက် logs အခါ,စကားဝှက်ကိုစစ်ဆေးပါ
$input_password = $_POST['password'] ?? '';
// စကားဝှက်ကိုစစ်ဆေးပါ
if (password_verify($input_password, $hashed_password)) {
// ဒေတာဘေ့စ်တွင်သိမ်းဆည်းထားသော hash string ကိုထုတ်ယူပါ
$stored_hash = $hashed_password;
// အသုံးပြုသူ၏စကားဝှက်ကိုနှိုင်းယှဉ်ပါ(ဒီနေရာမှာသရုပ်ပြမြင်ကွင်းကိုဒီနေရာမှာ Verification Tokens နဲ့တခြားအခြေအနေတွေပါ)
$input_hash = hash('sha256', $input_password);
// အသုံးပြု hash_equals စဉ်ဆက်မပြတ်အချိန်နှိုင်းယှဉ်
if (hash_equals($stored_hash, $input_hash)) {
echo "အောင်မြင်သောလက်မှတ်";
} else {
echo "authentication မအောင်မြင်ပါ";
}
} else {
echo "authentication မအောင်မြင်ပါ";
}
?>
မှတ်ချက် - အထက်ဖော်ပြပါဥပမာတွင် password_verify () သည် password leash နှင့် hash_equals () သည် API တိုကင်များသို့မဟုတ်စိတ်ကြိုက် hash တန်ဖိုးများကိုအတည်ပြုရန်အတွက်သင့်တော်သောအခြေအနေများအတွက်လုံခြုံစွာမှန်ကန်စွာအတည်ပြုခဲ့သည်။
ဖြစ်နိုင်ခြေအတော်များများတွင်အသုံးပြုသူမှဖြတ်သန်းသော API Token သည်ဆာဗာတွင်သိမ်းဆည်းထားသောတိုကင်နှင့်ကိုက်ညီမှုရှိ, မရှိကိုစစ်ဆေးရန်လိုအပ်သည်။ သင် == ကို တိုက်ရိုက်အသုံးပြုပါကအချိန်တိုက်ခိုက်မှုအန္တရာယ်ရှိသည်။
ဥပမာ -
<?php
// ဆာဗာဘေးထွက်သိုလှောင်မှုAPIလက်ခဏာသက်သေ
$stored_token = 'abc123def456';
// 用户提交的လက်ခဏာသက်သေ
$provided_token = $_GET['token'] ?? '';
// လုံခြုံနှိုင်းယှဉ်ပါ
if (hash_equals($stored_token, $provided_token)) {
echo "လက်ခဏာသက်သေ验证通过";
} else {
echo "လက်ခဏာသက်သေ验证失败";
}
?>
ဤနည်းအားဖြင့်တိုကင်များသည်မကိုက်ညီပါကပင်တိုက်ခိုက်သူသည်အချိန်ကုန်ခြင်းလုပ်ငန်းစဉ်ကိုနှိုင်းယှဉ်ခြင်းအားဖြင့်မှန်ကန်သောအမှတ်အသားကိုမထုတ်နိုင်ပါ။
Hash_equals () သည် အချိန်တိုက်ခိုက်မှုများကိုတားဆီးသောစဉ်ဆက်မပြတ် string ကိုနှိုင်းယှဉ်ပေးသည်။
စကားဝှက်ကိုစစ်ဆေးမှုတွင် password_hash () နှင့် password_verify () နှင့် hassh_equals () ကို အသုံးပြုရန်အကြံပြုသည်။
စီစဉ်ထားသော hash_equals () ကို အသုံးပြု. စစ်မှန်ကြောင်းအထောက်အထားပြသခြင်းလုပ်ငန်းစဉ်၏လုံခြုံရေးကိုသိသိသာသာတိုးတက်စေပြီးအထိခိုက်မခံသောသတင်းအချက်အလက်ယိုစိမ့်မှုအန္တရာယ်ကိုလျှော့ချနိုင်သည်။
PHP လုံခြုံရေးအသိအမှတ်ပြုလက်မှတ်ကိုပိုမိုလေ့လာလိုပါက https://gitbox.net/php-security သို့ဝင်ရောက်ကြည့်ရှုနိုင်သည်။