PHP ဖွံ့ဖြိုးတိုးတက်မှုတွင် SQL injection တိုက်ခိုက်မှုများကိုကာကွယ်ခြင်းသည်အရေးကြီးသောလုံခြုံရေးအလေ့အကျင့်တစ်ခုဖြစ်သည်။ ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များနှင့်ချည်နှောင်ထားသော parameters များကိုအသုံးပြုခြင်းသည်လက်ရှိအခြေအနေအရှိဆုံးနည်းလမ်းများအနက်မှတစ်ခုဖြစ်သည်။ ၎င်းတို့အနက် MySQLI_STMT :: AttR_Get function သည်အသုံးပြုမှုဆိုင်ရာသတ်မှတ်ချက်များနှင့်တိုက်ရိုက်မကိုက်ညီပါက developer များလုံခြုံရေးအသိအမြင်ရှိသည့်အချက်များနှင့်မူများကိုနားလည်ခြင်းလုပ်ငန်းစဉ်များတွင်ဖွံ့ဖြိုးတိုးတက်မှုအတွက်အပြုသဘောဆောင်သောအဓိပ္ပာယ်ရှိသည်။ ဤဆောင်းပါးသည် MySQLI_STMTMT :: AttR_Get ၏အခန်းကဏ် president ကိုမိတ်ဆက်ပေးပြီး SQL Injection ကိုကာကွယ်ရန်၎င်း၏အရန်အခန်းကဏ် dext ကိုရှင်းပြပါလိမ့်မည်။
MySQLI_STMM :: Attr_et သည် လက်ရှိကြေငြာချက်၏ attribute တန်ဖိုးကိုရရှိရန်အသုံးပြုသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်း၏အဓိကရည်ရွယ်ချက်မှာ MySQLI_STMT အရာဝတ်ထုကိုထပ်မံလုပ်ဆောင်ရန်သို့မဟုတ် debugging အတွက် MySQLI_STMM အရာဝတ်ထုကိုအသုံးပြုသောအခါအတွင်းပိုင်းဂုဏ်သတ္တိများကိုစစ်ဆေးရန်သို့မဟုတ်ရယူရန်ဖြစ်သည်။
Syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
public mysqli_stmt::attr_get(int $attribute): int|false
$ attribute သည်သင်ရလိုသည့် attribute သည် MySQLI_STMT_ATTR_APDATE_MAX_Length ကဲ့သို့သော attribute ဖြစ်သည် ။
MySQLI_STMT :: Att_get ကိုယ်တိုင်သည် SQL ဆေးထိုးခြင်းကိုတိုက်ရိုက်မတားဆီးနိုင်သော်လည်း၎င်းသည် debrougging tool တစ်ခုနှင့်တူသည်။ ပို. အရေးကြီးသည်မှာ developer များသည် developer များကို MySQLI_STMT အရာဝတ်ထုများမှတိုက်ရိုက်ခွဲထုတ်ခြင်းများကိုတိုက်ရိုက်ခွဲခြားထားသည့်မြင့်မားသောစွန့်စားမှုအရေးအသားနည်းလမ်းများမှဝေးကွာသွားစေသည်။
အောက်တွင်ကျွန်ုပ်တို့သည် SQL Injection ကိုပုံမှန်နည်းလမ်းဖြင့်မည်သို့ကာကွယ်နိုင်သည်ကိုသရုပ်ဖော်ရန်နှင့် Att_get ကို မည်သို့အသုံးပြုရမည်ကိုသရုပ်ဖော်ရန် preprocessing ထုတ်ပြန်ချက်များကို အသုံးပြု. ဥပမာတစ်ခုကိုအသုံးပြုသည်။
ကျွန်ုပ်တို့တွင်အသုံးပြုသူ login system တစ်ခုရှိပြီးရှေ့တန်းအဆုံးတွင်အသုံးပြုသူအမည်ကိုတင်ပြသည်ဆိုပါစို့။ ထိုအသုံးပြုသူအမည်အပေါ် အခြေခံ. ဒေတာဘေ့စ်ရှိမှတ်တမ်းများကိုမေးမြန်းရန်လိုအပ်သည်ဆိုပါစို့။
$username = $_GET['username'];
$sql = "SELECT * FROM users WHERE username = '$username'";
$result = $mysqli->query($sql);
အသုံးပြုသူမှ 0 င်ရောက်လာသော အသုံးပြုသူအမည် ဖြစ်ပါက admin '' - အထက်ပါ SQL ကို spliced လိမ့်မည်။
SELECT * FROM users WHERE username = 'admin' --'
ဤသည်လျှို့ဝှက်ချက်အတည်ပြုချက်ကို skips skeds sked sked security security အားနည်းချက်များကိုဖြစ်ပေါ်စေသည်။
$mysqli = new mysqli("localhost", "user", "password", "database");
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $_GET['username']);
$stmt->execute();
$result = $stmt->get_result();
// မလုပ်မနေရမဟုတ်သော:အိမ်ခြံမြေတန်ဖိုးကိုစစ်ဆေးပါ
$attr = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
if ($attr !== false) {
// output attribute ကိုတန်ဖိုး,ကြေငြာသောအပြုအမူကို debug လုပ်ရန်အသုံးပြုသည်
echo "လက်ရှိကြေညာချက်များ attribute တွေ:$attr";
}
အထက်ပါကုဒ်၌:
ကြိုတင်ပြင်ဆင်မှု () precompiled SQL template ကိုဖန်တီးသည်။
bind_param () အသုံးပြုသူထည့်သွင်းမှုများကို parameters များအဖြစ်ချည်နှောင်ထားပြီး SQL Code အဖြစ်ခွဲခြမ်းစိတ်ဖြာခြင်းမပြုရ။
Att_GET () သည် ပြဌာန်းချက်များရရှိရန်အတွက် Developer များကအချို့သောအခြေအနေများတွင်လက်ရှိအခြေအနေတွင်ဖော်ပြထားသောအရာဝတ်ထု၏လက်ရှိအပြုအမူအခြေအနေကိုဆုံးဖြတ်ရန်ကူညီနိုင်သည့်ကြေငြာချက် attribute များရရှိရန်အသုံးပြုနိုင်သည်။
ကျွန်ုပ်တို့သည်ပုံစံကိုတင်သွင်းသည့်စာမျက်နှာမှအသုံးပြုသူအမည် parameter များကို https://m66.net/login.php ကို တင်သွင်းရန်နှင့်အသုံးပြုသူအချက်အလက်များကိုမေးမြန်းခြင်းနှင့်မေးမြန်းခြင်းကိုရှာဖွေသည်ဆိုပါစို့။
<form action="https://m66.net/login.php" method="get">
<input type="text" name="username" />
<input type="submit" value="လော့ဂ်အင်" />
</form>
server-side processing code:
$mysqli = new mysqli("localhost", "user", "password", "database");
$stmt = $mysqli->prepare("SELECT id, email FROM users WHERE username = ?");
$stmt->bind_param("s", $_GET['username']);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo "အသုံးပြုသူID:" . $row['id'] . "<br>";
echo "စာပို့:" . $row['email'] . "<br>";
}
// အသုံးပြု attr_get ဂုဏ်သတ္တိများစစ်ဆေးပါ
$attr = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
if ($attr !== false) {
error_log("stmt ဉစ်စာပစ္စည်းများ:$attr", 0);
}
MySQLI_STMT :: AttR_Get သည် SQL injection ကိုတိုက်ရိုက်ကာကွယ်ပေးသော function မဟုတ်သော်လည်း MySQLI_STMT interface ကို အသုံးပြု. parameterized မေးမြန်းချက်များ၏အခြေအနေတွင်ဖော်ပြထားသောအရာဝတ်ထုများ၏အခြေအနေကိုနားလည်ရန်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။ ပြင်ဆင်ရန် () နှင့် bind_param နှင့်ပေါင်းစပ်ခြင်း ()) သည်လုံခြုံစိတ်ချရသောမေးမြန်းချက်များကိုတည်ဆောက်ရန်သာမကကုဒ်၏ debugggability နှင့်အားကောင်းလာစေရန်လည်းပိုမိုကောင်းမွန်စေသည်။ developer များက parameterized မေးမြန်းချက်များကိုအသုံးပြုခြင်းကိုအမြဲတမ်း ဦး စားပေးပေးသင့်သည် ။