လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP ၏ Crypt ၏လုံခြုံရေးကိုပိုမိုကောင်းမွန်စေရန် Hard-code ဆားတန်ဖိုးများကိုမည်သို့ရှောင်ရှားရမည်နည်း။

PHP ၏ Crypt ၏လုံခြုံရေးကိုပိုမိုကောင်းမွန်စေရန် Hard-code ဆားတန်ဖိုးများကိုမည်သို့ရှောင်ရှားရမည်နည်း။

M66 2025-05-24

PHP တွင် Crypt လုပ်ဆောင်ချက်များကိုစကားဝှက်ကိုဆေးထည့်ရန်မကြာခဏအသုံးပြုလေ့ရှိသည်။ သက်တန့်စားပွဲတင်တိုက်ခိုက်မှုများကဲ့သို့သောလုံခြုံရေးဆိုင်ရာအန္တရာယ်များကိုကာကွယ်ရန်အတွက် 4 င်း၏လုံခြုံရေးကိုဆားတန်ဖိုး (ဆား) မှတစ်ဆင့်တိုးမြှင့်ခြင်းခံရရန်ခွင့်ပြုသည်။ သို့သော် developer များစွာသည် Crypt ကို အသုံးပြုသောအခါ crypt ကိုအသုံးပြုသောအခါ cover-code ဆားတန်ဖိုးများကိုလေ့ကျင့်ကြသည်။ ဤဆောင်းပါးသည်ခက်ခဲသောဆားငန်သောဆားတန်ဖိုးများကိုမည်သို့ရှောင်ရှားရမည်ကိုအသေးစိတ်ဆွေးနွေးပါမည်။

အဘယ်ကြောင့်ဆားမထားသင့်သနည်း

Hard-coded ဆားတန်ဖိုးများသည် Code သို့တိုက်ရိုက်ဆားကြိုးကြိုးများကိုတိုက်ရိုက်ရေးသားခြင်းကိုရည်ညွှန်းသည်။

 $salt = '$6$rounds=5000$fixedsaltstring$';
$hash = crypt($password, $salt);

ဒီလိုလုပ်ဖို့သိသာထင်ရှားတဲ့အန္တရာယ်များရှိပါတယ်:

  • Salt Value Reuse : သုံးစွဲသူများရဲ့ Password Hashs အားလုံးသည်တူညီသောဆားကို သုံး. တိုက်ခိုက်သူသည်တိုက်ခိုက်မှုကိုကြိုတင်တွက်ချက်ခြင်းဖြင့်တိုက်ခိုက်မှုကိုကြိုတင်တွက်ချက်နိုင်သည်။

  • Exposed Salt Value : Source Code ကိုပေါက်ကြားပြီးတိုက်ခိုက်သူသည်ဆားနှင့် ပတ်သတ်. သိရှိနိုင်ပါက Hash cracking အခက်အခဲများကိုအလွန်လျှော့ချလိမ့်မည်။

  • စကေးမှခက်ခဲသည် - အကယ်. သင်သည်ဆားမဟာဗျူဟာကိုပြောင်းလဲရန်လိုအပ်ပါက hard-coded အပိုင်းကိုပြုပြင်ရန်အလွန်အမင်းပြောင်းလွယ်ပြင်လွယ်ဖြစ်သည်။

ဆားတန်ဖိုးများကို dynamically ကိုထုတ်လုပ်ရန်အကောင်းဆုံးအလေ့အကျင့်

အထက်ပါပြ problems နာများကိုရှောင်ရှားရန်ထူးခြားသည့်နှင့်လုံခြုံသောဆားများကိုပုံမှန်အားဖြင့်ထုတ်လုပ်ရန်အကြံပြုသည်။ ဒီမှာသော့ချက်အနည်းငယ်ရှိပါတယ်:

1 ။ ကျပန်းလုံခြုံသော bytes များကို သုံး. ဆားထုတ်လုပ်ပါ

PHP ၏ Discial_bytes () function သည်မြင့်မားသောကျပန်း bytes များကိုထုတ်လုပ်နိုင်ပြီး Base64 သို့မဟုတ်အလားတူ encoding များကိုပေါင်းစပ်ခြင်းဖြင့်ဆားကိုထုတ်လုပ်နိုင်သည်။

 function generateSalt($length = 16) {
    $bytes = random_bytes($length);
    return substr(strtr(base64_encode($bytes), '+', '.'), 0, $length);
}

2 ။ Algorithms နှင့် Parameters များကိုဆားကြိုးများဆောက်လုပ်ရန်ပေါင်းစပ်ပါ

ကွဲပြားခြားနားသော algorithms ကွဲပြားခြားနားသောဆားပုံစံများအတွက်ကွဲပြားခြားနားသောလိုအပ်ချက်များကိုရှိသည်။ SHA-512 ( $ 6 $ $ ) ကိုဥပမာတစ်ခုအနေဖြင့်ပုံစံတစ်ခုအနေဖြင့်,

 $6$rounds=5000$saltstring$

dynamic ဆားနှင့်ပေါင်းစပ်:

 $saltString = '$6$rounds=5000$' . generateSalt() . '$';
$hash = crypt($password, $saltString);

3 ။ အပြည့်အဝ hash သိုလှောင်

crypt မှ hash ပြန်လာသော hash တွင်ဆားသတင်းအချက်အလက်များပါရှိသည်။ သိုလှောင်သည့်အခါသင်ပြီးပြည့်စုံသော hash ကိုဆားမသိမ်းဆည်းဘဲသိမ်းဆည်းရန်လိုအပ်သည်။

အတည်ပြုသည့်အခါ crypt ကို input password နှင့် storage hash နှင့်တိုက်ရိုက်ခေါ်ဆိုပါ, ရလဒ်များကိုနှိုင်းယှဉ်ပါ။

 function verifyPassword($inputPassword, $storedHash) {
    return crypt($inputPassword, $storedHash) === $storedHash;
}

အမှန်တကယ်နမူနာကုဒ်

 <?php
// dynamic ဆားထုတ်လုပ်ပါ
function generateSalt($length = 16) {
    $bytes = random_bytes($length);
    return substr(strtr(base64_encode($bytes), '+', '.'), 0, $length);
}

// စကားဝှက် hash ကိုဖန်တီးပါ
function createHash($password) {
    $salt = '$6$rounds=5000$' . generateSalt() . '$';
    return crypt($password, $salt);
}

// စကားဝှက်ကိုစစ်ဆေးပါ
function verifyPassword($inputPassword, $storedHash) {
    return crypt($inputPassword, $storedHash) === $storedHash;
}

// ဥပမာအသုံးပြုမှု
$password = 'mypassword123';
$hash = createHash($password);

echo "hash တန်ဖိုး: $hash\n";

if (verifyPassword('mypassword123', $hash)) {
    echo "စကားဝှက်ကိုစစ်ဆေးခြင်းအောင်မြင်ခဲ့သည်!\n";
} else {
    echo "စကားဝှက်ကိုစစ်ဆေးခြင်းမအောင်မြင်ပါ!\n";
}
?>

အကျဉ်းချုပ်

Hard-coded ဆားတန်ဖိုးများကိုရှောင်ရှားခြင်းသည်စကားဝှက်ကိုဆေးထည့်ခြင်း၏လုံခြုံရေးကိုသိသိသာသာတိုးတက်စေနိုင်သည်။ PHPP ၏ကျပန်းနံပါတ်မျိုးဆက်လုပ်ဆောင်မှုကို အသုံးပြု. ထူးခြားသောဆားကိုဖန်တီးပြီး dynamase dynamase တစ်ခုဖန်တီးထားပြီး Hash ကိုဒေတာဗေ့စ်တွင်သိမ်းဆည်းထားသည့်ဒေတာဘေ့စ်တွင်သိမ်းထားသည်။

မကြာသေးမီ ဆောင်းပါးများ