လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MySQLI :: $ insert_id: SQL Injection တွင်လုံခြုံရေးပြ issues နာများကိုမည်သို့ရှောင်ရှားရမည်နည်း

MySQLI :: $ insert_id: SQL Injection တွင်လုံခြုံရေးပြ issues နာများကိုမည်သို့ရှောင်ရှားရမည်နည်း

gitbox 2025-05-29

PHP Development တွင် MySQLI ကို အသုံးပြုခြင်းသည်ဒေတာဘေ့စ်များ၏လည်ပတ်မှုကိုတိုးချဲ့ရန်အတွက် MySQLI ကိုအသုံးပြုခြင်းသည်ဘုံနှင့်ထိရောက်သောနည်းဖြစ်သည်။ အထူးသဖြင့်ကျွန်ုပ်တို့အနေဖြင့်ထည့်သွင်းမှုပြုလုပ်သောစစ်ဆင်ရေးကိုလုပ်ဆောင်ပြီးနောက် ဒေါ်လာ MySQLI-> Insert_id ကို သုံး. ပြန်လည်ထည့်သွင်းထားသောမှတ်တမ်း၏အလိုအလျောက်တိုးပွားလာသော ID ကိုရရှိရန်အတွက်ဒေါ်လာ MySQLI-> Insert_id ကို အသုံးပြုလေ့ရှိသည်။ သို့သော် $ insert_id ကိုယ်တိုင်က SQL injection ပြ problems နာများကိုဖြစ်ပေါ်စေသော်လည်းအချက်အလက်ထည့်သွင်းခြင်းလုပ်ငန်းစဉ်တစ်လျှောက်လုံးတွင် SQL ဆေးထိုးခြင်းကိုကာကွယ်ရန်အလွန်အရေးကြီးသည်။

MySQLI :: $ ထည့်သွင်းထားသောတိုက်ခိုက်မှုများ မှကာကွယ်ရန်အတွက်သွင်းသွင်းခွဲစိတ်မှု၏လုံခြုံမှုကိုဤဆောင်းပါးသည်ဤဆောင်းပါးသည် SQL ဆေးထိုးခြင်းတိုက်ခိုက်မှုများမှကာကွယ်ရန်မည်သို့သေချာစေရမည်ကိုအာရုံစိုက်ပါလိမ့်မည်။


MySQLI :: $ Insert_id ကဘာလဲ။

MySQLI :: $ insert_id သည် MySQLI Oblice ၏ attribute တစ်ခုဖြစ်ပြီးလတ်တလော Insert စစ်ဆင်ရေးမှထုတ်လုပ်သော autoincrement အဓိက key ID ကိုပြန်ပေးသည့် MySQLI အရာဝတ်ထု၏ attribute တစ်ခုဖြစ်သည်။ ဥပမာအားဖြင့်:

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$sql = "INSERT INTO users (username, email) VALUES ('alice', '[email protected]')";
$mysqli->query($sql);

echo "ရုံဒေတာထည့်သွင်းIDဟုတ်ကဲ့:" . $mysqli->insert_id;
?>

အထက်ပါဥပမာတွင် insert_id သည် ထည့်သွင်းထားသောအချက်အလက်များ၏ ID ကိုပြန်ပို့သည်။

INSERT_ID သည်ဒေတာဘေ့စ်ကထုတ်လုပ်သောကိန်းဂဏန်းတစ်ခုဖြစ်ပြီးလုံခြုံစိတ်ချရပြီး SQL Injection ၏အန္တရာယ်မရှိပါ။ သင်အမှန်တကယ်ကာကွယ်ရန်လိုအပ်သည့်အရာမှာထည့်သွင်းစဉ်အတွင်းအသုံးပြုသူအချက်အလက်များဖြစ်သည်။


SQL ဆေးထိုးအန္တရာယ်၏အကြောင်းရင်းအကြောင်းရင်း

SQL Injection ကိုများသောအားဖြင့်အသုံးပြုသူထည့်သွင်းမှုအားဖြင့် SQL ထုတ်ပြန်ချက်များကိုတိုက်ရိုက်ခွဲထားပြီး, ဥပမာအားဖြင့်:

 <?php
$username = $_GET['username']; // အသုံးပြုသူထည့်သွင်းမှုမှ
$sql = "INSERT INTO users (username) VALUES ('$username')";
$mysqli->query($sql);
?>

အသုံးပြုသူ alice ဝင်လျှင်); Drop table အသုံးပြုသူများ, - ၎င်းသည်ဒေတာဘေ့စ်စားပွဲ၏ဖျက်ခြင်းကဲ့သို့သောကြီးမားသောအကျိုးဆက်များကိုဖြစ်ပေါ်စေလိမ့်မည်။


SQL ဆေးထိုးခြင်းကိုမည်သို့ကာကွယ်ရမည်နည်း။

1 ။ ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များကိုသုံးပါ

ဤသည်မှာ SQL Injection ကိုကာကွယ်ရန်အသင့်ဆုံးနည်းလမ်းဖြစ်သည်။ MySQLI သည် SQL ထုတ်ပြန်ချက်များနှင့်အချက်အလက်များကိုသီးခြားစီဖြတ်ကျော်နိုင်သည့်ကြိုတင်သတ်မှတ်ထားသောဖော်ပြချက်များကိုထောက်ခံသည်။

ဥပမာ -

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

// Preprocessing ထုတ်ပြန်ချက်များကိုပြင်ဆင်ပါ
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");

// parameters တွေကိုချည်ထား
$username = $_POST['username'];
$email = $_POST['email'];
$stmt->bind_param("ss", $username, $email);

// ကရိယာတန်းဆာ
$stmt->execute();

echo "အသစ်ဖြည့်စွက်IDဟုတ်ကဲ့:" . $mysqli->insert_id;

$stmt->close();
$mysqli->close();
?>

ဒီမှာ, ? placeholder သည် placeholder တစ်ခုဖြစ်ပြီးအသုံးပြုသူထည့်သွင်းမှုကို SQL သို့တိုက်ရိုက်မအောင်မြင်ပါ။ ဒေတာဘေ့စ်အင်ဂျင်သည်၎င်းကိုသာမန်အချက်အလက်များအဖြစ်သတ်မှတ်ပြီး SQL Injection ကိုလုံးဝရှောင်ရှားလိမ့်မည်။

2 ။ တိကျစွာအသုံးပြုသူ input ကိုစစ်ဆေးပါ

Prosprocessing ထုတ်ပြန်ချက်များသည်အန္တရာယ်များကိုများစွာမလျှော့ချနိုင်သော်လည်း input formats သည်ကောင်းမွန်သောလုံခြုံရေးအလေ့အကျင့်တစ်ခုဖြစ်သည်။ ဥပမာအားဖြင့်, အသုံးပြုသူအမည်များကိုအက်ခရာနံပါတ်များကိုသာသာကန့်သတ်ခြင်း, စာတိုက်ပုံးများကိုစာတိုက်ပုံးပုံစံနှင့်ကိုက်ညီရမည်။

 <?php
if (!preg_match('/^[a-zA-Z0-9_]{3,20}$/', $username)) {
    die("အသုံးပြုသူအမည်ပုံစံမမှန်ကန်ပါ");
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    die("အီးမေးလ်ပုံစံမမှန်ကန်ပါ");
}
?>

3 ။ Dynamic Splicing SQL ထုတ်ပြန်ချက်များကိုမသုံးပါနှင့်

အသုံးပြုသူထည့်သွင်းမှုများကို SQL ကြေငြာချက်ကြိုးများသို့မကြည့်ပါနှင့်။ အကယ်. သင်သည်ချုပ်ရန်လိုအပ်ပါက $ MySQLI-> Real_escape_String_String () ကို သုံးရန်သေချာပါစေ။ သို့သော်ဤနည်းလမ်းသည် preprocessing ထုတ်ပြန်ချက်များကဲ့သို့လုံခြုံမှုမရှိပါ။


အကျဉ်းချုပ်

  • MySQLI :: $ insert_id သည် လုံခြုံပြီး SQL Injection ကိုမဖြစ်စေပါ။

  • အချက်အလက်များထည့်သွင်းသောအခါ SQL ဆေးထိုးခြင်းကိုရှောင်ရှားရန်ဖြစ်သည်။

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

  • ဒေတာလုံခြုံရေးကိုသေချာစေရန် input verification နှင့်ပူးပေါင်းပါ။

ဤနည်းအားဖြင့် MySQLI :: $ insert_id ကို အသုံးပြု. Self-incof id ID ကိုရရှိရန်အတွက်လုံခြုံရေးနှင့်စိတ်ပူစရာမရှိသောအခမဲ့သွင်းယူမှုကိုလည်းသေချာစေနိုင်သည်။