မျက်မှောက်ခေတ် Web Development တွင်လုံခြုံရေးသည်အရေးအကြီးဆုံးသောစိုးရိမ်မှုများတစ်ခုဖြစ်သည်။ Hash Algorithms သည်စကားဝှက်စစ်ဆေးခြင်းနှင့်ဝိသေသလက်ခဏာစစ်ဆေးခြင်းကဲ့သို့သောနယ်ပယ်များစွာတွင်ကျယ်ကျယ်ပြန့်ပြန့်အသုံးပြုကြသည်။ သို့သော် Hash Algorithms ကိုလုံခြုံရေးအလားအလာရှိသောလုံခြုံရေးအန္တရာယ်များနှင့်လည်းပါ 0 င်သည်။ ဤစိန်ခေါ်မှုနှင့်တွေ့ဆုံရန် PHP သည် hash တန်ဖိုးများကိုမသင့်လျော်သောနှိုင်းယှဉ်မှုကြောင့်ဖြစ်ပေါ်လာသောလုံခြုံရေးပြ problems နာများကိုထိရောက်စွာရှောင်ရှားနိုင်သည့် hash_equals () function ကိုထောက်ပံ့သည်။ ဤဆောင်းပါးသည် Hash Collisions ၏လုံခြုံရေးဆိုင်ရာအန္တရာယ်များကိုထိရောက်စွာကာကွယ်နိုင်သည်ကို ဤ ဆောင်းပါးသည်စူးစမ်းလေ့လာနိုင်သည်။
Hash Collision သည် hash algorithm ကိုဖြတ်သန်းပြီးနောက်ကွဲပြားခြားနားသော input data data သည်တူညီသော hash တန်ဖိုးကိုထုတ်ပေးသည်။ Hash function သည် Infinite data finite finite space တစ်ခုသို့ infinite data ကိုမြေပုံဆွဲသောကြောင့်ထိုကွဲပြားခြားနားသောအချက်အလက်များ၏ကွဲပြားခြားနားသောဒေတာနှစ်ခုသည် hash collision ဟုခေါ်သောတူညီသော hash တန်ဖိုးကိုထုတ်လုပ်လိမ့်မည်ဟုဖြစ်နိုင်ခြေရှိသည်။ hash algorithms အများစုသည်ပိုမိုအားကောင်းလာစေရန်နှင့်တိုက်မိခြင်းဖြစ်နိုင်ချေဖြစ်နိုင်ခြေရှိရန်ဒီဇိုင်းပြုလုပ်ထားသော်လည်း Hash Collisions သည်လျှို့ဝှက်နံပါတ်သိုလှောင်ခြင်း,
PHP တွင် Hash နှိုင်းယှဉ်မှုများအတွက် == သို့မဟုတ် === အော်ပရေတာကိုမကြာခဏအသုံးပြုလေ့ရှိသည်။ သို့သော်ဤတိုက်ရိုက်နှိုင်းယှဉ်ခြင်းနည်းလမ်းသည် hash တိုက်မှုကြောင့်လုံခြုံရေးအန္တရာယ်များကိုထိရောက်စွာမတားဆီးနိုင်ပါ။ အကြောင်းပြချက်များမှာအောက်ပါအတိုင်းဖြစ်သည် -
string နှိုင်းယှဉ်ချက် - circuit spp php တွင်, == နှိုင်းယှဉ်ခြင်းအော်ပရေတာသည်အမျိုးအစားပြောင်းလဲခြင်းနှင့်တိုတောင်းသောတိုက်နယ်လုပ်ငန်းများကိုလုပ်ဆောင်သည်။ ဥပမာအားဖြင့်, ကြိုးနှစ်ချောင်းသည်မတူညီသောအရှည်များရှိပါက PHP သည်ဇာတ်ကောင်များနှင့်နှိုင်းယှဉ်စရာမလိုဘဲ၎င်းတို့သည်နှိုင်းယှဉ်ခြင်းမပြုဘဲတန်းတူမဟုတ်ကြောင်းတိုက်ရိုက်ဆုံးဖြတ်သည်။ ဤအင်္ဂါရပ်ကိုတိုက်ခိုက်သူများကအမြတ်ထုတ်နိုင်ပြီးလုံခြုံရေးအားနည်းချက်များကိုဖြစ်ပေါ်စေသည်။
အချိန်တိုက်ခိုက်မှု Hashes နှစ်ခုလုံးလုံးဝကွဲပြားခြားနားရင်တောင်နှိုင်းယှဉ်လျှင်အချိန်ကွာခြားချက်သည်တိုက်ခိုက်သူအားအဖိုးတန်သဲလွန်စများကိုပေးနိုင်သည်။ ဥပမာအားဖြင့်တိုက်ခိုက်သူသည် hash တန်ဖိုး၏ကွဲပြားခြားနားသောအစိတ်အပိုင်းများကိုဆုံးဖြတ်ရန်ကြိုးစားရန်တောင်းဆိုမှုများကိုထပ်ခါတလဲလဲပေးပို့ခြင်းအားဖြင့်မှန်ကန်သော hash ကိုထပ်ခါတလဲလဲပေးပို့နိုင်သည်။
PHP သည် hash_equals () function ကိုထောက်ပံ့ပေးသည်။ ၎င်းသည် hash တန်ဖိုးနှစ်ခုကိုလုံခြုံစွာနှိုင်းယှဉ်ရန်အသုံးပြုသည်။ Hash_equals () သည် hash collisions နှင့်အချိန်တိုက်ခိုက်မှုများကိုရှောင်ရှားရန်အထူးဒီဇိုင်းပြုလုပ်ထားပြီး၎င်း၏အဓိကအင်္ဂါရပ်များမှာ -
Fixed-Length နှိုင်းယှဉ်ချက် - Hash_equals () ကသူတို့ဟာတူညီတဲ့တူညီတယ်, ကြိုးနှစ်ချောင်း byte ကိုနှိုင်းယှဉ်ခြင်းအားဖြင့်တစ်ချိန်တည်းကိုအမြဲတမ်းသုံးပါ။ input အချက်အလက်များတွင်ကွဲပြားခြားနားမှုများရှိနေသော်လည်းနှိုင်းယှဉ်ခြင်းဖြစ်စဉ်မှစားသုံးသည့်အချိန်သည်အဆက်မပြတ်ဖြစ်သည်။ ဤနည်းအားဖြင့်တိုက်ခိုက်သူသည် hash တန်ဖိုးကိုအချိန်ကွာဖြင့်မတူပါ။
တိုတောင်းသောဆားကစ်များကိုကာကွယ်ရန် - == အော်ပရေတာကိုနှိုင်းယှဉ်။ မတူဘဲ hashh_equals () သည် ပထမကွဲပြားခြားနားသောအနေအထားကိုမတွေ့မချင်းကြိုးနှစ်ချောင်းတစ်ခုစီကိုတစ်ခုနှင့်နှိုင်းယှဉ်ထားသည်။ ဤအချက်သည်အချို့သောကိစ္စရပ်များတွင်ကြိုးနှစ်ချောင်းသို့မဟုတ်ပါ 0 င်မှုအမျိုးမျိုးရှိလျှင်ပင်နှိုင်းယှဉ်ခြင်းဖြစ်စဉ်သည်စောစီးစွာအဆုံးသတ်လိမ့်မည်မဟုတ်ကြောင်းသေချာစေသည်။
စွမ်းဆောင်ရည်အကောင်းမြင် - hash_equals () function ကိုစွမ်းဆောင်ရည်အချက်များနှင့်အတူဒီဇိုင်းထုတ်ထားပြီးအချိန်တိုက်ခိုက်မှုများကိုရှောင်ရှားနေစဉ်၎င်းသည်အစီအစဉ်၏စွမ်းဆောင်ရည်အပေါ်အလွန်အမင်းသက်ရောက်မှုမရှိပါ။
အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်ကျွန်ုပ်တို့သည် hash တန်ဖိုးများကိုအထူးသဖြင့်စကားဝှက်စစ်ဆေးခြင်းသို့မဟုတ်ဒစ်ဂျစ်တယ်လက်မှတ်ရေးအတည်ပြုခြင်းနှင့်ပတ်သက်လာလျှင်ကျွန်ုပ်တို့မကြာခဏနှိုင်းယှဉ်ရန်လိုအပ်သည်။ Hash_equals () နှင့်အတူ Hash Value နှိုင်းယှဉ်မှု၏လုံခြုံရေးကိုကျွန်ုပ်တို့သေချာစေရန်နှင့်အလားအလာရှိသောအချိန်တိုက်ခိုက်မှုကိုရှောင်ရှားနိုင်သည်။ Hash_equals () ကို အသုံးပြု. hash တန်ဖိုးနှိုင်းယှဉ်ခြင်း၏ဥပမာတစ်ခုမှာ -
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// ဒီဟာကိုဒေတာဘေ့စ်ထဲမှာသိမ်းထားတဲ့ hash password ကိုယူဆတယ်</span></span><span>
</span><span><span class="hljs-variable">$stored_hash</span></span><span> = </span><span><span class="hljs-string">'$2y$10$V56J9qz4dFZyFiq8A5B72qf6lmXjUM3gj/qkQTqFtCNUZ.Y6TnYWy'</span></span><span>;
</span><span><span class="hljs-comment">// အသုံးပြုသူအားဖြင့်ထည့်သွင်းထားသောစကားဝှက်</span></span><span>
</span><span><span class="hljs-variable">$user_input_password</span></span><span> = </span><span><span class="hljs-string">'user_password'</span></span><span>;
</span><span><span class="hljs-comment">// အသုံးပြု password_hash() 函数对အသုံးပြုသူအားဖြင့်ထည့်သွင်းထားသောစကားဝှက်进行哈希</span></span><span>
</span><span><span class="hljs-variable">$user_input_hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">password_hash</span></span><span>(</span><span><span class="hljs-variable">$user_input_password</span></span><span>, PASSWORD_BCRYPT);
</span><span><span class="hljs-comment">// Hash တန်ဖိုးများကိုနှိုင်းယှဉ်</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">hash_equals</span></span><span>(</span><span><span class="hljs-variable">$stored_hash</span></span><span>, </span><span><span class="hljs-variable">$user_input_hash</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"စကားဝှက်မှန်,အတည်ပြုလက်မှတ်အတည်ပြု!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"စကားဝှက်,authentication မအောင်မြင်ပါ!"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
အထက်ပါကုဒ်တွင်သိမ်းဆည်းထားသော Hash Password ကိုအသုံးပြုသူမှထည့်သွင်းထားသော hash value ကိုလုံခြုံစွာနှိုင်းယှဉ်ရန် hash_equals () ကို အသုံးပြုသည်။ ထည့်သွင်းထားသောစကားဝှက်သည်မှန်ကန်မှုရှိ, မရှိမည်သို့ပင်ရှိပါစေ Hash_equals () သည် hash တန်ဖိုးနှိုင်းယှဉ်မှုတွင်အချိန်ကွာခြားမှုကိုမည်သည့်အချိန်ကွဲပြားမှုကိုထုတ်ဖော်ပြောဆိုနိုင်ပြီးအချိန်ကိုတိုက်ခိုက်ရန်တားဆီးနိုင်သည်။
အချိန်တိုက်ခိုက်မှုများကိုတားဆီးပါ ။ Hash_equals () သည် နှိုင်းယှဉ်ချက်သည်အဆက်မပြတ်ပါ 0 င်ခြင်းနှင့် Hash Contents သည်အဆက်မပြတ်မသက်ဆိုင်ကြောင်းသေချာစေသည်။ ထို့ကြောင့်တိုက်ခိုက်သူသည်နှိုင်းယှဉ်ခြင်းဖြင့်စားသုံးခြင်းအားဖြင့်အချိန်ကိုဆန်းစစ်ခြင်းအားဖြင့် hash တန်ဖိုးနှင့်ပတ်သက်သောသတင်းအချက်အလက်များကိုပိုမိုသိရှိရန်မရနိုင်ပါ။
ပိုမိုကောင်းမွန်သောလုံခြုံရေး - == အော်ပရေတာကို အသုံးပြု. တိုက်ရိုက်နှိုင်းယှဉ်မှုများသည်လုံလောက်သောလုံခြုံရေးအန္တရာယ်များကိုဖြစ်ပေါ်စေနိုင်သည်, Hash_equals () ဤပြ problems နာများကို byte byte နှင့်နှိုင်းယှဉ်ခြင်းနှင့်အချိန်ရှေ့နောက်ညီညွတ်မှုကိုနှိုင်းယှဉ်ခြင်းအားဖြင့်ဤပြ problems နာများကိုရှောင်ကြဉ်ပါ။
အကောင်အထည်ဖော်ရန်လွယ်ကူသည် - hash_equals () ကို အသုံးပြုခြင်းသည်သင်၏ကုဒ်၏လုံခြုံရေးကိုတိုးတက်စေရန်ရိုးရှင်းသောနှင့်ထိရောက်သောနည်းလမ်းဖြစ်သည်။ developer များရှုပ်ထွေးသောနှိုင်းယှဉ်မှုယုတ္တိဗေဒမိမိတို့ကိုယ်ကိုရေးရန်မလိုအပ်ပါ။ Code ၏တိုက်ခိုက်မှုကိုတွန်းလှန်နိုင်စွမ်းကိုမြှင့်တင်ရန်အတွက် == သို့မဟုတ် == အော်ပရေတာများကိုအစားထိုးရန်လိုအပ်သည်။
Hash_equals () function သည် hash တန်ဖိုးများကိုပိုမိုလုံခြုံသောနှိုင်းယှဉ်မှုများအတွက် PHP တွင်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။ အထူးသဖြင့် hash တိုက်မှုနှင့်အချိန်တိုက်ခိုက်မှုများကိုတားဆီးရာတွင်မသင့်လျော်သောနှိုင်းယှဉ်မှုများကြောင့်ဖြစ်ပေါ်လာသောလုံခြုံရေးအန္တရာယ်များကိုထိရောက်စွာတားဆီးနိုင်သည်။ စဉ်ဆက်မပြတ်နှိုင်းယှဉ်အချိန်နှင့် byte-byte-safe နှိုင်းယှဉ်ခြင်း, hash_equals () စကားဝှက်စိစစ်မှုနှင့်ဒစ်ဂျစ်တယ်လက်မှတ်များကဲ့သို့သောလုံခြုံစိတ်ချရသောနှင့်အထိခိုက်မခံသောစစ်ဆင်ရေးများကိုကိုင်တွယ်ရာတွင်ယုံကြည်စိတ်ချရသောအကာအကွယ်ပေးမှုကိုပေးသည်။
လုံခြုံပြီးအ ထိခိုက် မခံသောအပလီကေးရှင်းများဖွံ့ဖြိုးလာသောအခါ hash တန်ဖိုးများကိုနှိုင်းယှဉ်ရန် Hash_equals () ကို အမြဲတမ်းသုံးပါ ။