လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> SQL injection ကိုပြုပြင်မွမ်းမံခြင်းမရှိပါ။ ရလဒ်များသည်ပုံမှန်မဟုတ်သောဖြစ်ကြသည်

SQL injection ကိုပြုပြင်မွမ်းမံခြင်းမရှိပါ။ ရလဒ်များသည်ပုံမှန်မဟုတ်သောဖြစ်ကြသည်

M66 2025-05-28

MySQL ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PHP ကိုအသုံးပြုသောအခါ developer များသည် MySQLI extensions တွင်ဆက်စပ်သောလုပ်ငန်းများကိုမကြာခဏ သုံး. ရှာဖွေတွေ့ရှိခြင်းနှင့်လုပ်ငန်းစဉ်ရလဒ်များကိုပြုလုပ်ရန်ဖြစ်သည်။ ဥပမာ MySQLI_QUERY () ကို MySQLI_RESULT OFF ကိုအလွယ်တကူရရှိနိုင်သည့် query ရလဒ်များကိုအလွယ်တကူရယူနိုင်သည်။ သို့သော် SQL ထုတ်ပြန်ချက်များကိုတည်ဆောက်ရာတွင် input parameters များကိုစနစ်တကျမလုပ်ဆောင်ပါက SQL Injection ပြ problems နာများကိုဖြစ်ပေါ်စေနိုင်သည့် SQL injection ပြ problems နာများကိုဖြစ်ပေါ်စေပြီးပုံမှန်မဟုတ်သောစုံစမ်းမှုရလဒ်များ,

1 ။ ပြ problem နာဇာတ်လမ်းဥပမာ

အသုံးပြုသူအချက်အလက်များကိုမေးမြန်းသောစာမျက်နှာတစ်ခုရှိသည်ဆိုပါစို့, ကုဒ်သည်အောက်ပါအတိုင်းဖြစ်သည် -

 <?php
$conn = new mysqli("localhost", "root", "password", "mydb");

$username = $_GET['username']; // အသုံးပြုသူထည့်သွင်းမှုမှ
$sql = "SELECT * FROM users WHERE username = '$username'";

$result = $conn->query($sql);

if ($result && $result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        echo "အသုံးပြုသူ: " . $row["username"] . ",စာပို့: " . $row["email"] . "<br>";
    }
} else {
    echo "未找到အသုံးပြုသူ";
}
$conn->close();
?>

အသုံးပြုသူသည်အောက်ပါ URL ထဲသို့ဝင်လျှင် -

 https://m66.net/user.php?username=admin' OR '1'='1

ထိုအခါ SQL ကြေညာချက်ဖြစ်လာလိမ့်မည်:

 SELECT * FROM users WHERE username = 'admin' OR '1'='1'

၎င်းသည် authentication ကိုအခြေအနေကိုကျော်လွှားနိုင်ပြီးသုံးစွဲသူများအားလုံးအတွက်မှတ်တမ်းများပြန်ပို့ပေးလိမ့်မည်။

2 ။ ပုံမှန်မဟုတ်သောစုံစမ်းမှုရလဒ်များ၏အကြောင်းရင်းများကိုခွဲခြမ်းစိတ်ဖြာခြင်း

MySQLI_RESULT အရာဝတ်ထုကိုလုပ်ဆောင်ရန်ရလဒ်အနေဖြင့်ပြန်လည်ရောက်ရှိသည့်အချက်အလက်များသည် SQL ကြေငြာချက်၏ကွပ်မျက်မှုရလဒ်အပေါ်မူတည်သည်။ အကယ်. တရားမ 0 င်သောအခြေအနေများနှင့်ထုတ်ပြန်ကြေငြာချက်ကိုထုတ်ပြန်ခြင်းသည်မမျှော်လင့်သောအချက်အလက်များပါ 0 င်သောရလဒ်ကိုဘက်လိုက်မှုရှိလိမ့်မည်။

  • Misjudgment အခြေအနေများ - အထက်ဖော်ပြပါဥပမာ - ယုတ္တိဗေဒသည် $ ရလဒ် - နံပါတ်များသည် မှန်ကန်သည်ကိုဆုံးဖြတ်သည်။

  • ဒေတာယိုစိမ့်မှု - တိုက်ခိုက်သူများသည်အခြားအသုံးပြုသူများ၏ privacy ကိုဖတ်ရန်အခြေအနေများကိုတည်ဆောက်နိုင်သည်။

  • ရှုပ်ထွေးသောနောက်ဆက်တွဲစစ်ဆင်ရေးများ - အကယ်. သင်သည်ခွင့်ပြုချက်တရားစီရင်ချက်များကိုဆက်လက်ပြုလုပ်နေပါကရလဒ်များအပေါ် အခြေခံ. မှတ်တမ်းများနှင့်အခြားစစ်ဆင်ရေးများကိုပြုပြင်ပါကအကျိုးဆက်များမှာ ပို. လေးနက်လိမ့်မည်။

3 ။ ဖြေရှင်းနည်း

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

SQL injection ကို ပြင်ဆင်ခြင်း () နှင့် bind_param () () -

 <?php
$conn = new mysqli("localhost", "root", "password", "mydb");

$username = $_GET['username'];
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();

$result = $stmt->get_result();
if ($result && $result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        echo "အသုံးပြုသူ: " . $row["username"] . ",စာပို့: " . $row["email"] . "<br>";
    }
} else {
    echo "未找到အသုံးပြုသူ";
}

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

Preprocessing ထုတ်ပြန်ချက်များကိုအသုံးပြုပြီးနောက် parameters တွေကိုအလိုအလျောက်ထွက်ပြေးတိမ်းရှောင်ခြင်း,

2 ။ အသုံးပြုသူ filter ကို filter

၎င်းသည်ကြိုတင်လျှောက်ထားခြင်းမပြုနိုင်သော်လည်းလုံခြုံရေးအာမခံချက်ကိုဖြည့်စွက်ရန်အတွက်သုံးစွဲသူထည့်သွင်းမှုအားလုံးသည်လိုအပ်သောစိစစ်စစ်ဆေးမှုကိုခံယူသင့်သည်။ ဥပမာအားဖြင့်:

 $username = filter_input(INPUT_GET, 'username', FILTER_SANITIZE_STRING);

သို့မဟုတ်တရားမ 0 င်စာလုံးများနှင့်သော့ချက်စာလုံးများကိုငြင်းပယ်ရန်စိတ်ကြိုက်စီစစ်ခြင်းဆိုင်ရာယုတ္တိဗေဒ။

3 ။ ဒေတာဘေ့စ်ဝင်ရောက်လာလွှာအလွှာ၏စည်းလုံးညီညွတ်မှု encapsulation

developer များမှထပ်ခါတလဲလဲအမှားများကိုမတူကွဲပြားသော module များဖြင့်ထပ်ခါတလဲလဲအမှားများကိုရှောင်ရှားနိုင်ရန်အတွက်ဒေတာဘေ့စ် 0 င်ရောက်မှုဆိုင်ရာယုတ္တိဗေဒကိုစုစည်းထားသောလူတန်းစားသို့မဟုတ် function တစ်ခုအဖြစ် encapsulate လုပ်ရန်အကြံပြုသည်။

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

MySQLI_RESULEL ကိုယ်တိုင်က SQL injections ပြ problems နာများကိုဖြစ်ပေါ်စေမည်မဟုတ်သော်လည်း unescaped sql ထုတ်ပြန်ချက်များဖြင့်အသုံးပြုပါက၎င်းသည်စုံစမ်းမှုအဆင့်တွင်ကြီးမားသောလျှို့ဝှက်အန္တရာယ်များကိုဖြစ်ပေါ်စေလိမ့်မည်။ အသုံးပြုသူ input တွင်ပါ 0 င်နေသရွေ့စုံစမ်းမှုလုပ်ငန်းလည်ပတ်မှုသည်မည်မျှပင်အန္တရာယ်ဖြစ်စေနိုင်ပါစေအသုံးဝင်သောထုတ်ပြန်ချက်များကိုအသုံးပြုရမည်။

သတိရပါ - ** အသုံးပြုသူအမည်တစ်ခုတည်းသော်ပင်လျှင်မည်သည့် input ကိုမယုံကြည်ပါနှင့်။ ** M66.net ကဲ့သို့သောအွန်လိုင်း 0 န်ဆောင်မှုများတွင်ဤအခြေခံလုံခြုံရေးအစီအမံများကိုလျစ်လျူရှုပါကအနည်းဆုံးအချက်အလက်များသည်ပုံမှန်မဟုတ်သောကြောင့်အဆိုးဆုံးတွင်စနစ်ပျက်သွားသည်။

၎င်းသည် PHP developer တိုင်းသည်အကျိုးသင့်အကြောင်းသင့်ရှိသောအကာအကွယ်ပေးမှုအစီအမံများပြုလုပ်ရန်နှင့်ကုဒ်အဆင့်မှ SQL Injection ကိုဖယ်ရှားရန်အတွက်မလိုလားအပ်သောတာဝန်ဖြစ်သည်။