လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MySQLI_STMT :: __ SQL Injection ကိုကာကွယ်ရာတွင် Play ကိုတည်ဆောက်ခြင်းအတွက်မည်သည့်အရေးပါသောအခန်းကဏ် play မှပါဝင်သနည်း။

MySQLI_STMT :: __ SQL Injection ကိုကာကွယ်ရာတွင် Play ကိုတည်ဆောက်ခြင်းအတွက်မည်သည့်အရေးပါသောအခန်းကဏ် play မှပါဝင်သနည်း။

gitbox 2025-07-26

SQL Injection သည် 0 က်ဘ်အပလီကေးရှင်းများတွင်ဘုံလုံခြုံရေးအားနည်းချက်များအနက်မှတစ်ခုဖြစ်သည်။ တိုက်ခိုက်သူများသည်အန္တရာယ်ရှိသော SQL Code ကိုမေးမြန်းခြင်းများထဲသို့ 0 င်ရောက်ခွင့်ပြုချက်မရရှိသည့်ဒေတာဘေ့စ် 0 င်ရောက်မှုကိုရယူနိုင်ပါသည်။ SQL Injection ကိုကာကွယ်ရန် developer များသည် SQL Query ၏လုံခြုံရေးကိုသေချာစေရန်အတွက် developer များပြုလုပ်ရမည်။ PHP တွင် MySQLI_STMT :: __ တည်ဆောက်ခြင်းသည် ကြိုတင်ပြင်ဆင်ထားသောကြေညာချက်ယန္တရားတစ်ခုအနေဖြင့်, ဤဆောင်းပါးသည် MySQLI_STMMT :: __ SQL Injection ကိုတားဆီးရာတွင် MySQLI_STMT :: __ တည်ဆောက်ခြင်း သည်အရေးကြီးသောအခန်းကဏ် sprought များကိုလေ့လာလိမ့်မည်။

1 ။ Preprocessing ထုတ်ပြန်ချက်များ၏အခြေခံသဘောတရားများ

MySQLI_STMT :: __ တည်ဆောက်မှု သည် PHP တွင် MySQLI မှ PHP တွင် MySQLI extension မှထောက်ပံ့ပေးသည့်ဖော်ပြချက်အသစ်တစ်ခုကိုဖန်တီးရန်ဖြစ်သည်။ သာမန် SQL query ထုတ်ပြန်ချက်များနှင့်မတူဘဲ Preprocessing ထုတ်ပြန်ချက်များသည် SQL ထုတ်ပြန်ချက်များနှင့်အချက်အလက်များကိုသီးခြားစီပြုပြင်ခြင်းကိုသီးခြားစီထုတ်ဖော်ပြောဆိုခွင့်ပြုသည်။ Preprocessing ထုတ်ပြန်ချက်များကိုအသုံးပြုခြင်းအားဖြင့် developer များသည် SQL Query ကို SQL Query ကိုဒေတာဘေ့စ်ဆာဗာသို့ခွဲခြားထားနိုင်သည်,

2 ။ SQL ထိုးဆေးအလုပ်လုပ်ပုံ

SQL injections များကိုများသောအားဖြင့်အသုံးပြုသူ input fields ထဲသို့အန္တရာယ်ရှိသော SQL Code ထဲသို့ထည့်ခြင်းဖြင့်အကောင်အထည်ဖော်လေ့ရှိသည်။ ဥပမာအားဖြင့်, login form တစ်ခုသည်အသုံးပြုသူအမည်နှင့်စကားဝှက်ကိုလက်ခံပြီးအသုံးပြုသူ၏မည်သူမည်ဝါဖြစ်ကြောင်းအတည်ပြုရန်အောက်ပါ SQL မေးမြန်းမှုကိုအသုံးပြုသည်ဆိုပါစို့။

 <span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users WHERE username = '<span class="hljs-subst">$username</span></span></span><span>' AND password = '</span><span><span class="hljs-subst">$password</span></span><span>'";
</span></span>

အကယ်. တိုက်ခိုက်သူသည်အောက်ပါအကြောင်းအရာများထဲသို့ 0 င်ရောက်သောအကြောင်းအရာကို 0 င်ရောက်ပါက -

 <span><span><span class="hljs-string">' OR '</span></span><span>1</span><span><span class="hljs-string">' = '</span></span><span>1
</span></span>

အဆိုပါစုံစမ်းမှုဖြစ်လာလိမ့်မည်:

 <span><span><span class="hljs-keyword">SELECT</span></span><span> </span><span><span class="hljs-operator">*</span></span><span> </span><span><span class="hljs-keyword">FROM</span></span><span> users </span><span><span class="hljs-keyword">WHERE</span></span><span> username </span><span><span class="hljs-operator">=</span></span><span> </span><span><span class="hljs-string">''</span></span><span> </span><span><span class="hljs-keyword">OR</span></span><span> </span><span><span class="hljs-string">'1'</span></span><span> </span><span><span class="hljs-operator">=</span></span><span> </span><span><span class="hljs-string">'1'</span></span><span> </span><span><span class="hljs-keyword">AND</span></span><span> password </span><span><span class="hljs-operator">=</span></span><span> </span><span><span class="hljs-string">'$password'</span></span><span>;
</span></span>

၎င်းသည် authentication ကိုရှောင်ကွင်း။ ဒေတာဘေ့စ်ရှိဒေတာအားလုံးကိုတိုက်ရိုက်ပြန်ပို့ပေးပြီးလုံခြုံရေးပြ issues နာများဖြစ်ပေါ်စေသည်။

3 ။ Preprocessing ထုတ်ပြန်ချက်များအားဖြင့် SQL ဆေးထိုးကာကွယ်ပုံ

Preprocessing ထုတ်ပြန်ချက်များသည် SQL Query ဖွဲ့စည်းပုံကိုဒေတာနှင့်သီးခြားစီလုပ်ဆောင်ခြင်းဖြင့် SQL Query ကိုတိုက်ရိုက်လုပ်ဆောင်ခြင်းကိုတိုက်ရိုက်ထိခိုက်စေသည်။ MySQLI_STMT :: __ တည်ဆောက်မှုကို အသုံးပြုသောအခါ SQL ကြေငြာချက်၏ဖွဲ့စည်းပုံကိုရှာဖွေခြင်းနှင့်သိမ်းဆည်းခြင်းများကိုသိမ်းဆည်းခြင်းနှင့်စုဆောင်းသည်ကို database သို့ပို့သည်။ ဤနည်းလမ်းသည် SQL Injection Attack ကိုကာကွယ်ခြင်း, dynamic input data များမှစုံစမ်းမှုပုံစံကိုထိထိရောက်ရောက်ခွဲထုတ်ခဲ့သည်။

3.1 ဖွဲ့စည်းပုံနှင့်ဒေတာခွဲခြားခြင်း

MySQLI_STMT :: __ တည်ဆောက်ခြင်းကို အသုံးပြုခြင်းအားဖြင့်စုံစမ်းမှုကြေငြာချက်တွင် variable များအားလုံးကို SQL string ကိုတိုက်ရိုက်ထည့်သွင်းထားခြင်းမခံရမည့်အစား parameters များကို parameters များအဖြစ်သတ်မှတ်လိမ့်မည်။ ဥပမာအားဖြင့်, အောက်ပါနည်းလမ်းကို အသုံးပြု. preprocessing ကြေညာချက်ကိုဖန်တီးပါ။

 <span><span><span class="hljs-variable">$conn</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-variable">$host</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$dbname</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$conn</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE username = ? AND password = ?"</span></span><span>);
</span></span>

ဤအချက်မှာမေးခွန်းအမှတ်အသား ( ? ) စုံစမ်းစစ်ဆေးရေးဖော်ပြချက်တွင် placeholder ကိုကိုယ်စားပြုသည်

 <span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"ss"</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>);
</span></span>

ဤကိစ္စတွင်ဒေတာဘေ့စ်စနစ်သည် ဒေါ်လာအသုံးပြုသူအမည် နှင့် $ စကားဝှက်ကို SQL ထုတ်ပြန်စာ၏တစ်စိတ်တစ်ပိုင်းအဖြစ်မကုသတော့ပါ။ သို့သော်အချက်အလက်အဖြစ်ဆောင်ရွက်လိမ့်မည်။ ဆိုလိုသည်မှာသုံးစွဲသူသည်အန္တရာယ်ရှိသော SQL Code ထဲသို့ 0 င်ရောက်လျှင်ပင်ဒေတာဘေ့စ်သည်၎င်းကိုစုံစမ်းမှု၏တစ်စိတ်တစ်ပိုင်းအဖြစ်ကွပ်မျက်မည်မဟုတ်ပါ။

3.2 ဒေတာအမျိုးအစားများအပေါ်တင်းကြပ်စွာကန့်သတ်ချက်များ

bind_param ကို ခေါ်သည့်အခါ developer သည် parameter တစ်ခုစီအတွက်ဒေတာအမျိုးအစားကိုဖော်ပြရန်လိုအပ်သည်။ ဥပမာအားဖြင့်, "SS" ဆိုသည်မှာ ဒေါ်လာအသုံးပြုသူအမည် နှင့် $ စကားဝှက်သည် string ting အမျိုးအစားများဖြစ်သည်။ ဤအချက်အလက်အမျိုးအစားအကန့်အသတ်သည် input data ကိုဒေတာဘေ့စ်သို့အမြဲတမ်းမှန်ကန်သောပုံစံဖြင့်အမြဲတမ်းဖြတ်သန်းသွားကြောင်း, အသုံးပြုသူသည်အထူးအက္ခရာများ (သို့) အန္တရာယ်ရှိသောကုဒ်အချို့ကို 0 င်ရောက်သော်လျှင်ပင်ဒေတာဘေ့စ်ကိုသတ်မှတ်ထားသောဒေတာအမျိုးအစားအရလုပ်ဆောင်လိမ့်မည်။

4 ။ Preprocessing ထုတ်ပြန်ချက်များ၏အခြားလုံခြုံရေးအတွက်အားသာချက်များ

SQL Injection ကိုကာကွယ်ရန်အပြင် MySQLI_STMT :: __ တည်ဆောက်ခြင်း နှင့်ကြိုတင်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များသည်အောက်ပါလုံခြုံရေးအကျိုးကျေးဇူးများကိုပေးသည်။

  • ဒေတာယိုစိမ့်မှုကိုတားဆီးပါ ။ Proprocessing ထုတ်ပြန်ချက်များကိုအသုံးပြုခြင်းအားဖြင့်,

  • စွမ်းဆောင်ရည်တိုးတက်စေရန်အတွက် : Preprocessing ထုတ်ပြန်ချက်များကိုပြန်လည်အသုံးပြုနိုင်သည်။ တူညီသောဖွဲ့စည်းပုံနှင့်အတူမေးမြန်းချက်များတွင်စုံစမ်းမှုတစ်ခုသာအားဖြည့်ရန်လိုအပ်ပါတယ်, နောက်ဆက်တွဲ execution အတွက်ကွဲပြားခြားနားသော parametersters သာသာခညျြနှောငျဖို့လိုသည်,

  • အမှားကိုင်တွယ်ခြင်းသည်ပိုမိုခိုင်မာသည် ။ Preprocessing ထုတ်ပြန်ချက်များကိုအသုံးပြုခြင်းအားဖြင့် SQL ထုတ်ပြန်ချက်များသည်အမြဲတမ်းမှန်ကန်ကြောင်းသေချာစေပြီး syntax အမှားများကြောင့်အလားအလာရှိသောအန္တရာယ်များကိုလျှော့ချနိုင်သည်။

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

MySQLI_STMT :: __ SQL Injection ကိုတားဆီးရာတွင် Plays Plays Plays Plays သည်အဓိကအခန်းကဏ် plays မှပါ 0 င်သည်။ စုံစမ်းမှု၏ဖွဲ့စည်းပုံနှင့် parameters တွေကိုသီးခြားစီပြုပြင်ခြင်းအားဖြင့်၎င်းသည်စုံစမ်းမှုကြေညာချက်ကိုတိုက်ရိုက်ပြုပြင်ရန်အသုံးပြုသူထည့်သွင်းမှုအတွက်အခွင့်အလမ်းကိုရှောင်ရှားသည်။ ထို့အပြင် Proprocessing ထုတ်ပြန်ချက်များသည်အချက်အလက်အမျိုးအစားအကန့်အသတ်များဖြင့် 0 က်ဘ်အပလီကေးရှင်းများလုံခြုံရေး, ခေတ်သစ် PHP ဖွံ့ဖြိုးတိုးတက်မှုတွင် developer များက applications များကို SQL Injection မှကာကွယ်ရန်အတွက်ဒေတာဘေ့စ်မေးမြန်းချက်များကိုတည်ဆောက်ရန် Proprocessing ထုတ်ပြန်ချက်များကိုအသုံးပြုသည်။