PDO အတွင်း SQL Query ပြဿနာများ (PHP)
သင်သိပြီးသားဖြစ်သင့်သည့်အတိုင်း SQL query များသည် SQL ထိုးသွင်းမှုများကို ခံနိုင်ရည်ရှိသည်။ PDO အက်စ်တင်ရှင်း၏ ရည်ရွယ်ချက်မှာ ထိုသို့သောထိုးသွင်းမှုများကို တိုက်ဖျက်ရန်ဖြစ်သော်လည်း ပုံမှန်အားဖြင့်၊ ၎င်းသည် ၎င်းကို အလိုလိုမလုပ်ပါ။
ဥပမာတစ်ခုဖြင့် ပြဿနာကို ကြည့်ကြပါစို့။ ကျွန်ုပ်တို့တွင် အောက်ပါ query တစ်ခုရှိပြီး အထဲသို့ variable တစ်ခုထည့်သွင်းသည်ဆိုပါစို့။
<?php
$sql = "SELECT * FROM users WHERE id=$id";
$res = $pdo->query($sql);
?>
ကျွန်ုပ်တို့၏ variable သည် အပြင်ဘက်မှတစ်စုံတစ်ခုမှ လာသည်ဆိုပါစို့၊ ဥပမာ - GET parameter မှဖြစ်သည်။ ရိုးရှင်းစေရန်၊ သို့သော် ၎င်း၏တန်ဖိုးကို လက်ဖြင့်သတ်မှတ်ကြပါစို့။ ကျွန်ုပ်တို့သည် ဂဏန်းတန်ဖိုးတစ်ခုခုကို မျှော်လင့်ပါသည်၊ ဥပမာအားဖြင့်-
<?php
$id = 1;
?>
သို့သော်၊ မကောင်းသောစိတ်ရှိသည့် ဟက်ကာတစ်ဦးသည်
အောက်ပါတန်ဖိုးကို ပေးပို့နိုင်သည် (ကျွန်ုပ်တို့တွင်
field တစ်ခုရှိသည်ဟုယူဆပါ - role)
<?php
$id = '-1 OR role="admin"';
?>
ဆိုလိုသည်မှာ ကျွန်ုပ်တို့သည် အောက်ပါ query ကို ရည်ရွယ်ခဲ့သည်။
<?php
$sql = "SELECT * FROM users WHERE id=1";
$res = $pdo->query($sql);
?>
သို့သော် အောက်ပါ query ကိုရရှိလိုက်ပြီး ၎င်းသည် ဝဘ်ဆိုဒ်၏ အက်ဒမင်ကို ဆွဲထုတ်ပစ်သည်။
<?php
$sql = "SELECT * FROM users WHERE id=-1 OR role="admin"";
$res = $pdo->query($sql);
?>
ထိုသို့သောအခြေအနေကို ရှောင်ရှားရန်၊ PDO တွင် အထူးယန္တရားတစ်ခုကို ပြင်ဆင်ထားပြီး ၎င်းကို ပြင်ဆင်ထားသော query များဟုခေါ်သည်။ ၎င်းတို့ကို ကျွန်ုပ်တို့ နောက်လာမည့်သင်ခန်းစာတွင် လေ့လာပါမည်။
သင်၏ဒေတာဘေ့စ်သို့ SQL ထိုးသွင်းမှုကို ရည်ရွယ်ချက်ရှိရှိ ဆောင်ရွက်ပါ။