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 အပိုင်းကိုပြုပြင်ရန်အလွန်အမင်းပြောင်းလွယ်ပြင်လွယ်ဖြစ်သည်။
အထက်ပါပြ problems နာများကိုရှောင်ရှားရန်ထူးခြားသည့်နှင့်လုံခြုံသောဆားများကိုပုံမှန်အားဖြင့်ထုတ်လုပ်ရန်အကြံပြုသည်။ ဒီမှာသော့ချက်အနည်းငယ်ရှိပါတယ်:
PHP ၏ Discial_bytes () function သည်မြင့်မားသောကျပန်း bytes များကိုထုတ်လုပ်နိုင်ပြီး Base64 သို့မဟုတ်အလားတူ encoding များကိုပေါင်းစပ်ခြင်းဖြင့်ဆားကိုထုတ်လုပ်နိုင်သည်။
function generateSalt($length = 16) {
$bytes = random_bytes($length);
return substr(strtr(base64_encode($bytes), '+', '.'), 0, $length);
}
ကွဲပြားခြားနားသော algorithms ကွဲပြားခြားနားသောဆားပုံစံများအတွက်ကွဲပြားခြားနားသောလိုအပ်ချက်များကိုရှိသည်။ SHA-512 ( $ 6 $ $ ) ကိုဥပမာတစ်ခုအနေဖြင့်ပုံစံတစ်ခုအနေဖြင့်,
$6$rounds=5000$saltstring$
dynamic ဆားနှင့်ပေါင်းစပ်:
$saltString = '$6$rounds=5000$' . generateSalt() . '$';
$hash = crypt($password, $saltString);
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 ကိုဒေတာဗေ့စ်တွင်သိမ်းဆည်းထားသည့်ဒေတာဘေ့စ်တွင်သိမ်းထားသည်။