လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Multibyte ဇာတ်ကောင်များထုတ်လုပ်သည့်အခါအဘယ်သဟဇာတဖြစ်သောလုပ်ဆောင်ချက်များကိုမည်သည့်လိုက်ဖက်ခြင်းဆိုင်ရာပြ issues နာများကြုံတွေ့ရသနည်း။ multibyte strings ကိုထုတ်ပေးရန် exploit ကိုမည်သို့မှန်ကန်စွာအသုံးပြုရမည်နည်း

Multibyte ဇာတ်ကောင်များထုတ်လုပ်သည့်အခါအဘယ်သဟဇာတဖြစ်သောလုပ်ဆောင်ချက်များကိုမည်သည့်လိုက်ဖက်ခြင်းဆိုင်ရာပြ issues နာများကြုံတွေ့ရသနည်း။ multibyte strings ကိုထုတ်ပေးရန် exploit ကိုမည်သို့မှန်ကန်စွာအသုံးပြုရမည်နည်း

gitbox 2025-09-11
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// ဒီအပိုဒ်PHPကုဒ်သည်စာသား၏အကြောင်းအရာနှင့်ဘာမှမဆိုင်ပါဘူး,သာဥပမာတစ်ခုသာဖြည့်ပါ。</span></span><span>
</span><span><span class="hljs-comment">// လက်တွေ့ကျသော application တွင်,ဤတွင်သင်အချို့သောမသက်ဆိုင်သောယုတ္တိဗေဒကိုရေးနိုင်ပါတယ်。</span></span><span>
</span><span><span class="hljs-variable">$time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">"Y-m-d H:i:s"</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-variable">$time</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-comment"># explodeMultibyte ဇာတ်ကောင်များထုတ်လုပ်သည့်အခါအဘယ်သဟဇာတဖြစ်သောပြ issues နာများကြုံတွေ့ရမည်နည်း?ဘယ်လိုမှန်ကန်စွာအသုံးပြုရမလဲexplodemultibyte strings process</span></span><span>

တည်နေPHPဖွံ့ဖြိုးမှုအောက်မှာ,`explode`သတ်မှတ်ထားသော delimiters အရ arrays သို့ strings များသို့ strings များခွဲရန် function များကိုမကြာခဏအသုံးပြုလေ့ရှိသည်။。该函数တည်နေ处理英文或单字节字符串နာရီ通常不会有问题,但တည်နေ面对中文、ဂျပန်、ထိုကဲ့သို့သောကိုရီးယားကဲ့သို့သော Multi-byte ဇာတ်ကောင်အခါ,သို့သော်၎င်းသည်အချို့သောလိုက်ဖက်တဲ့အန္တရာယ်များဖြစ်စေနိုင်သည်。ဤပြ problems နာများကိုနားလည်ပြီး၎င်းတို့နှင့်ကိုင်တွယ်ရန်မှန်ကန်သောနည်းလမ်းကိုကျွမ်းကျင်စွာရှင်းပြပါ,ပရိုဂရမ်၏တည်ငြိမ်မှုနှင့်မှန်ကန်မှုကိုသေချာစေရန်အလွန်အရေးကြီးသည်。

</span><span><span class="hljs-comment">## တစ်、explodeတည်နေ多字节字符下的潜တည်နေ问题</span></span><span>

</span><span><span class="hljs-number">1</span></span><span>. **အဆိုပါ separator ကိုဖြတ်သည်**  
   အဆိုပါခွဲထုတ်သူ့ဟာသူ multibyte ဇာတ်ကောင်ဖြစ်ပါတယ်အခါ(တရုတ်ပုဒ်ဖြတ်ပုဒ်ရပ်လိုပဲ)နာရီ,`explode`တည်နေ内部是按照字节进行拆分的,ဇာတ်ကောင်မဟုတ်。encoding သို့မဟုတ်အပြောင်းအလဲနဲ့မမှန်လျှင်,အဆိုပါ Separator ကိုအမှားအားဖြင့်ဖျက်သိမ်းနိုင်ပါသည်,ဤသည် segmentation ၏ပျက်ကွက်မှုမှ ဦး ဆောင်သည်。

</span><span><span class="hljs-number">2</span></span><span>. **ကုဒ်不တစ်致**  
   PHPstring လုပ်ဆောင်ချက်အများစုသည် byte-level စစ်ဆင်ရေးများဖြစ်သည်,string ကိုအမှန်တကယ်အသုံးပြုလျှင်UTF-</span><span><span class="hljs-number">8</span></span><span>Multi-byte encoding ကိုစောင့်ပါ,အဆိုပါခွဲထုတ်သို့မဟုတ်အပြောင်းအလဲနဲ့ယုတ္တိဗေဒ single-byte encoding ဖြစ်ရန်ယူဆ(ကဲ့သို့ISO-</span><span><span class="hljs-number">8859</span></span><span>-</span><span><span class="hljs-number">1</span></span><span>),ပေါ်လာလိမ့်မည်“မှန်ကန်စွာကိုက်ညီနိုင်ခြင်း”အခြေအနေ。

</span><span><span class="hljs-number">3</span></span><span>. **ခန့်မှန်းရခက်ရလဒ်များ**  
   ကဲ့သို့果字符串中混杂中文和英文,အဆိုပါ Separator ရွေးချယ်မှုမသင့်လျော်သည်,အုပ်စုခွဲရလဒ်သည် counched code သို့မဟုတ်ပုံမှန်မဟုတ်သော Array ဖွဲ့စည်းပုံရှိနိုင်သည်,နောက်ဆက်တွဲယုတ္တိဗေဒအမှားအယွင်းများဖြစ်ပေါ်စေသည်。

</span><span><span class="hljs-comment">## နှစ်、ဘယ်လိုမှန်ကန်စွာအသုံးပြုရမလဲexplodemultibyte strings process</span></span><span>

</span><span><span class="hljs-number">1</span></span><span>. **确保统တစ်ကုဒ်**  
   တည်နေ操作前,string ကိုနှစ် ဦး စလုံး string ကိုအသုံးပြုကြသည်သေချာပါစေUTF-</span><span><span class="hljs-number">8</span></span><span>ကုဒ်。例ကဲ့သို့:
   ```php
   </span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"ပန်းသီး,ငှက်ပျောသီး,ဖရဲသီး"</span></span><span>;
   </span><span><span class="hljs-variable">$delimiter</span></span><span> = </span><span><span class="hljs-string">","</span></span><span>;
   </span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-variable">$delimiter</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
   </span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

ဤဥပမာတွင် delimiter သည်အင်္ဂလိပ်စာကော်မာတစ်ခုဖြစ်ပြီး UTF-8 encoding အောက်တွင်ပြ problem နာမရှိပါ။

  1. Multibyte ဇာတ်ကောင်များကိုခွဲခြမ်းစိတ်ဖြာခြင်းဖြင့်ရှောင်ကြဉ်ပါ အကယ်. သင်သည်တရုတ်ပုဒ်ဖြတ်ပုဒ်ရပ်ကိုခွဲထုတ်သူတစ် ဦး အဖြစ်အသုံးပြုရန်လိုပါက exploit အစား mb_split ကို သုံး. စဉ်းစားနိုင်သည်။

     <span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"ပန်းသီး,ငှက်ပျောသီး,ဖရဲသီး"</span></span><span>;
    </span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">","</span></span><span>; </span><span><span class="hljs-comment">// တရုတ်ကော်မာ</span></span><span>
    </span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_split</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
    </span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
    </span></span>
  2. ပုံမှန်အသုံးအနှုန်းများနှင့်အတူ <br> ခွဲခွာခြင်းစည်းမျဉ်းစည်းကမ်းများသည်ပိုမိုရှုပ်ထွေးသည့်အခါ PREG_SPLIT ကို ပုံမှန်ပေါင်းစပ်ခြင်းဖြင့်ပိုမိုပြောင်းလွယ်ပြင်လွယ်ရှိသောအစိတ်အပိုင်းကိုသင်ရရှိနိုင်ပါသည်။

     <span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"ပန်းသီး,ငှက်ပျောသီး;ဖရဲသီး|သဗျစ်သီး"</span></span><span>;
    </span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">"/[,;|]/u"</span></span><span>; </span><span><span class="hljs-comment">// အသုံးပြုUnicodeပုံစံ</span></span><span>
    </span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_split</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
    </span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
    </span></span>
  3. လိုအပ်ပါကလက်စွဲစာအုပ်အပြောင်းအလဲနဲ့ အထူးသဖြင့်ရှုပ်ထွေးသော segmentation ယုတ္တိဗေဒရှိပါကစာလုံးများကိုအမှားများဖြင့်မဖြတ်နိုင်စေရန် mb_stropos နှင့် mb_substr ကဲ့သို့သော MB_Stros နှင့် MB_Substr တို့နှင့်ပထမဆုံးအကြိမ်ခွဲဝေနိုင်သည်။

3 ။ အကျဉ်းချုပ်

Exploit function သည်အခြေခံအားဖြင့် byte အခြေပြုစစ်ဆင်ရေးကိရိယာတစ်ခုဖြစ်ပြီး UTF-8 ကဲ့သို့သော Deltiter ကိုယ်တိုင်ကဲ့သို့အထူးသဖြင့် byte-byte ဇာတ်ကောင်တစ် ဦး ဖြစ်သည်။ မှန်ကန်မှုကိုသေချာစေရန် developer များသည် single-byte searchator များကိုအသုံးပြုခြင်းသို့မဟုတ် string segmemment ကိုအကောင်အထည်ဖော်ရန် MB_SPLIT နှင့် PREG_SPLIT ကဲ့သို့သော Multi-byte-friendly method များကိုပေါင်းစပ်သင့်သည်။ Encoding, Separator Selection နှင့် function ခေါ်ဆိုမှုများ, condbled code နှင့်မမျှော်လင့်သောအမှားများကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။

 <span></span>
  • သက်ဆိုင်သောတက်(ဂ်)များ:

    explode