PHP တွင် Hash_equals function သည် hash shings နှစ်ခုတန်းတူရှိမရှိအန္တရာယ်ကင်းစွာအသုံးပြုသော function တစ်ခုဖြစ်သည်။ မူရင်းဒီဇိုင်းမှာအချိန်တိုက်ခိုက်မှုကိုရှောင်ရှားရန်ဖြစ်သည်။ ဆိုလိုသည်မှာ Hackers သည်စကားဝှက်မှန်ကန်မှုရှိ, သို့သော်အမှန်တကယ်အသုံးပြုမှုတွင် developer များသည်များသောအားဖြင့်သာမန်အမှားများကိုပြုလုပ်လေ့ရှိပြီးမျှော်လင့်ထားသည့်လုံခြုံရေးအကျိုးသက်ရောက်မှုကိုအောင်မြင်ရန် Hash_equals function ကိုဖြစ်ပေါ်စေသည်။ ဤဆောင်းပါးသည်ဤအမှားများကိုအသေးစိတ်ဆွေးနွေးထားပြီးဖြေရှင်းနည်းများကိုထောက်ပံ့ပေးသည်။
hash_equals ၏ရည်ရွယ်ချက်မှာကြိုးနှင့်နှိုင်းယှဉ်ပါကအချိန်ကွာခြားချက်များမှတဆင့်စကားဝှက်အချက်အလက်များကိုယိုစိမ့်မှုများကိုတားဆီးရန်ဖြစ်သည်။ ရိုးရာ == သို့မဟုတ် === အော်ပရေတာနှင့်မတူဘဲ Hash_equals နှိုင်းယှဉ်နေစဉ်အတွင်း string ကိုအရှည်သို့မဟုတ်အကြောင်းအရာအပေါ် မူတည်. မရပါ။ ထို့ကြောင့်အချိန်တိုက်ခိုက်မှုများကိုရှောင်ရှားနိုင်သည်။
ဘုံအမှားများအနက်မှတစ်ခုမှာ Hash_equals ပုံမှန် string နှိုင်းယှဉ်မှုလုပ်ငန်းများနှင့်ရှုပ်ထွေးစေသည်။ ဥပမာအားဖြင့်:
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$password</span></span><span> == </span><span><span class="hljs-variable">$storedPasswordHash</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Password is correct!"</span></span><span>;
}
</span></span>
ဤနေရာတွင် Hash တန်ဖိုးများကိုနှိုင်းယှဉ်ခြင်း, PHP သည်သာမန်နှိုင်းယှဉ်မှုများနှင့်နှိုင်းယှဉ်ခြင်း == သို့မဟုတ် == ကိုနှိုင်းယှဉ်ခြင်း == သို့မဟုတ် == သည် Hash တန်ဖိုးရှိအကြောင်းအရာသို့မဟုတ်အရှည်အပေါ် အခြေခံ. ကွဲပြားခြားနားသောအကောင်းမြင်မှုများပြုလုပ်နိုင်သည်။
ဖြေရှင်းချက် -
Hash နှိုင်းယှဉ်မှုအတွက် hashh_equals ကို အမြဲတမ်းသုံးပါ။
<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">$password</span></span><span>, </span><span><span class="hljs-variable">$storedPasswordHash</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Password is correct!"</span></span><span>;
}
</span></span>
နောက်အမှားတစ်ခုမှာမူရင်းစကားဝှက်ကိုသိုလှောင်ထားသော hash တန်ဖိုးကိုနှိုင်းယှဉ်သောအခါ hash_equals များကို အသုံးပြုရန်ဖြစ်သည်။ ၎င်းသည် developer များက Plustext ကို hash တန်ဖိုးများကိုတိုက်ရိုက်နှိုင်းယှဉ်နိုင်သည်ဟုထင်ကောင်းထင်မည်ဟူသောအသုံးအများဆုံးအယူအဆဖြစ်သည်။
<span><span><span class="hljs-comment">// အမှားသရုပ်ပြ</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">$password</span></span><span>, </span><span><span class="hljs-title function_ invoke__">password_hash</span></span><span>(</span><span><span class="hljs-variable">$password</span></span><span>, PASSWORD_BCRYPT))) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Password is correct!"</span></span><span>;
}
</span></span>
Password_hash သည် hash value ကိုပြန်ပို့သောကြောင့်ဤကုဒ်သည်မှားသည် ။
ဖြေရှင်းချက် -
စကားဝှက်ကိုရှင်းရှင်းလင်းလင်းစာသားနှင့် hash တန်ဖိုးကိုပထမ ဦး ဆုံးစစ်ဆေးသင့်သည် ( password_verify ) ။ Password_verify သည်ဤရည်ရွယ်ချက်အတွက်ဒီဇိုင်းပြုလုပ်ထားသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">password_verify</span></span><span>(</span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$storedPasswordHash</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Password is correct!"</span></span><span>;
}
</span></span>
နှိုင်းယှဉ်မှုကို ဖျော်ဖြေတဲ့အခါမှာ hash value ရဲ့ contents တွေကိုနှိုင်းယှဉ်ခြင်းအပြင် hash တန်ဖိုးနှစ်ခုရဲ့အရှည်ဟာအတူတူပဲရှိမရှိစစ်ဆေးတယ်။ အကယ်. အရှည်သည်ကိုက်ညီမှုမရှိပါက Hash_equals သည် မလိုအပ်သောတွက်ချက်မှုများကိုဆက်လက်လုပ်ဆောင်ခြင်းကိုရှောင်ရှားရန်ချက်ချင်း ပြန်ပို့ လိမ့်မည်။ ထို့ကြောင့် developer များအနေဖြင့်အချို့သောကိစ္စရပ်များတွင်အဝင် Hash တန်ဖိုးများသည်အရှည်ကွဲပြားမှုမရှိသောကြောင့်အမှားများကိုဖြစ်ပေါ်စေသည်။
ဥပမာအားဖြင့်, အကယ်. သင်သည် hash (ဥပမာ - ခြင်းကိုဖြစ်ပေါ်စေခြင်းသို့မဟုတ် formatting) ကိုလုပ်ဆောင်ပါက,
ဖြေရှင်းချက် -
Hashes မလိုအပ်သောပြုပြင်မွမ်းမံခြင်းကိုရှောင်ရှားရန်နှင့်နှိုင်းယှဉ်သောအခါတသမတ်တည်းပုံစံကိုအသုံးပြုရန်သေချာအောင်လုပ်ပါ။ Password_Hash function သည် standard hash format ကိုပြန်ယူပြီးလက်စွဲစစ်ဆင်ရေးကိုရှောင်ရှားရန်ကြိုးစားသည်။
Hash_equals များသည် တူညီသောအမျိုးအစား၏ hash တန်ဖိုးများကိုနှိုင်းယှဉ်နိုင်သည်။ လျှို့ဝှက်နံပါတ် (ဥပမာ MD5 နှင့် Sha256 ကို သုံး. ) ကိုဆေးကြောသောအခါကွဲပြားခြားနားသော algorithm ကိုအသုံးပြုပါက hash_equals နှိုင်းယှဉ်မှုသည်မတူညီသော hash algorithms နှင့်နှိုင်းယှဉ်နိုင်သည့်နှိုင်းယှဉ်မှုကိုမကိုင်တွယ်နိုင်သည့်အတွက်မအောင်မြင်ပါ။
<span><span><span class="hljs-comment">// အမှားသရုပ်ပြ:md5 နှင့် sha256 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-title function_ invoke__">md5</span></span><span>(</span><span><span class="hljs-variable">$password</span></span><span>), </span><span><span class="hljs-title function_ invoke__">sha256</span></span><span>(</span><span><span class="hljs-variable">$password</span></span><span>))) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Password is correct!"</span></span><span>;
}
</span></span>
ဖြေရှင်းချက် -
စကားဝှက်သိုလှောင်မှုနှင့်နှိုင်းယှဉ်ခြင်းတို့ကိုတူညီသော Hashing algorithm ကို အသုံးပြု. အသုံးပြုသည်။ hash တန်ဖိုးများကိုထုတ်လုပ်ရန် password_hash function ကိုအသုံးပြုပါက၎င်းသည်သင့်တော်သော hashing algorithm (များသောအားဖြင့် Bcrypt သို့မဟုတ် argon2) ကိုအသုံးပြုလိမ့်မည် ။
hash_equals နှစ်ခု hash တန်ဖိုးများတန်းတူဖြစ်ကြောင်းညွှန်ပြ Boolean တန်ဖိုးကိုပြန်ပို့သည်။ အကယ်. developer သည်တန်ဖိုး၏မှန်ကန်သောကိုင်တွယ်မှုကိုလျစ်လျူရှုပါက၎င်းသည်မှားယွင်းသောယုတ္တိဆိုင်ရာတရားစီရင်ပိုင်ခွင့်များကို ဦး တည်သွားနိုင်သည်။
<span><span><span class="hljs-comment">// အမှားသရုပ်ပြ:ပြန်လည်မိတ္တူတန်ဖိုးကိုလုပ်ငန်းများ၌မရှိပါ</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">$password</span></span><span>, </span><span><span class="hljs-variable">$storedPasswordHash</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Password is correct!"</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">"Password is incorrect!"</span></span><span>;
}
</span></span>
ဤနေရာတွင်အမှားသည် hash_equals မဟုတ်ဘဲအမှားအယွင်းများအောက်တွင်သင့်တော်သောလုပ်ငန်းစဉ်ကိုင်တွယ်ခြင်းမရှိခြင်း။ စကားဝှက်စစ်ဆေးခြင်းလုပ်ငန်းစဉ်၏လုံခြုံရေးကိုသေချာစေရန်စကားဝှက်မှန်ကန်မှုရှိ, မရှိမည်သို့ပင်ဖြစ်စေ, တုံ့ပြန်ချက်များမှန်ကန်မှုရှိစေရန်လိုအပ်သည်။
ဖြေရှင်းချက် -
Hash_Equals ၏ပြန်လာတန်ဖိုးကို အခြေခံ. သင့်လျော်သောဆုံးဖြတ်ချက်ချရန်သေချာစေပါ။
<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">$password</span></span><span>, </span><span><span class="hljs-variable">$storedPasswordHash</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Password is correct!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-comment">// လုံခြုံမှုအမှားကိုင်တွယ်,ထိုကဲ့သို့သောသစ်ထုတ်လုပ်ရေးအဖြစ်</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Invalid password!"</span></span><span>;
}
</span></span>
Hash_equals သည်အချိန်တိုက်ခိုက်မှုများကိုကာကွယ်ရန်အလွန်အရေးကြီးသော PHP function တစ်ခုဖြစ်သည်။ သို့သော်မမှန်ကန်သောအသုံးပြုမှုသည်အစီအစဉ်တွင်လုံခြုံရေးအားနည်းချက်များကိုဖြစ်ပေါ်စေနိုင်သည်။ သာမန်အမှားများတွင် hash နှိုင်းယှဉ်မှုများနှင့်အတူ plaintext passwords နှင့်ကွဲပြားသော hash algorithms ကို အသုံးပြု. plaintext password များကိုမှားယွင်းစွာနှိုင်းယှဉ်ခြင်းနှင့်ကွဲပြားခြားနားသော hash algorithms ကိုအသုံးပြု။ နှင့်နှိုင်းယှဉ်ပါ။ ဤအမှားများကိုဖြေရှင်းရန်သော့ချက်မှာ hash_equals ၏အသုံးပြုမှုဖြစ်ရပ်များကိုနားလည်ရန်နှင့်စကားဝှက်၏မှန်ကန်မှုကိုအတည်ပြုရန်သင့်လျော်သောအခြေအနေများတွင် စကားဝှက်ကို အသုံးပြုရန်ဖြစ်သည်။
မှန်ကန်သောအကောင်အထည်ဖော်မှုနှင့်အကောင်းဆုံးအလေ့အကျင့်များအားဖြင့်စကားဝှက်စစ်ဆေးခြင်းလုပ်ငန်းစဉ်တွင်လုံခြုံရေးကိုအလွန်တိုးတက်ကောင်းမွန်စေပြီးတိုက်ခိုက်မှုအန္တရာယ်များကိုရှောင်ရှားနိုင်သည်။