လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> [Real_Query function ကိုမှတစ်ဆင့်ရှာဖွေခြင်းနှင့်ဒေတာဘေ့စ်လုံခြုံရေးကိုသေချာစေရန် SQL ဆေးထိုးခြင်းကိုမည်သို့ကာကွယ်နိုင်သနည်း

[Real_Query function ကိုမှတစ်ဆင့်ရှာဖွေခြင်းနှင့်ဒေတာဘေ့စ်လုံခြုံရေးကိုသေချာစေရန် SQL ဆေးထိုးခြင်းကိုမည်သို့ကာကွယ်နိုင်သနည်း

gitbox 2025-06-11

Web Development တွင် SQL Injection သည်ဘုံတိုက်ခိုက်မှုနည်းလမ်းဖြစ်သည်။ တိုက်ခိုက်သူများသည် Database ကို SQL query ထုတ်ပြန်ချက်များကိုထည့်သွင်းခြင်းဖြင့်ဒေတာဘေ့စ်ကိုကိုင်တွယ်ခြင်းဖြင့်ဒေတာများကိုခိုးယူခြင်း, ပြုပြင်ခြင်း, ဖျက်ခြင်း, ဖျက်ခြင်း, SQL Injection ကိုကာကွယ်ရန် PHP developer များသည်ဒေတာဘေ့စ်၏လုံခြုံရေးကိုကာကွယ်ရန်ထိရောက်သောဆောင်ရွက်မှုများပြုလုပ်ရမည်။ ဤဆောင်းပါးသည် SQL Injection ၏အန္တရာယ်ကိုရှောင်ရှားရန် Requesery Function မှတစ်ဆင့်လုံခြုံစိတ်ချရသောမေးမြန်းချက်များကိုမည်သို့လုပ်ဆောင်ရမည်ကိုမိတ်ဆက်ပေးလိမ့်မည်။

SQL Inject ဆိုတာဘာလဲ။

SQL Injection သည် developer များကအသုံးပြုသူထည့်သွင်းမှုများကိုစနစ်တကျကိုင်တွယ်သည့်အခါလုံခြုံရေးအားနည်းချက်ဖြစ်သည်။ တိုက်ခိုက်သူသည်တရားမ 0 င်စစ်ဆင်ရေးများရရှိရန်အထူးပြုလုပ်ထားသော SQL Code ကိုထည့်သွင်းခြင်းဖြင့်ဒေတာဘေ့စ်မေးမြန်းချက်ထုတ်ပြန်ချက်များကိုဖြည့်ဆည်းပေးသည်။ ဘုံတိုက်ခိုက်မှုနည်းလမ်းများပါဝင်သည်:

  • ဒေတာဘေ့စ်တွင်အထိခိုက်မခံသောအချက်အလက်များကိုကြည့်ပါ

  • ဒေတာကိုဖျက်ပစ်သို့မဟုတ်ပြုပြင်မွမ်းမံ

  • authentication ကိုရှောင်ကွင်း

SQL ဆေးထိုးခြင်းကိုကာကွယ်ရန်အခြေခံမူများ

  1. သုံးစွဲသူ input ကိုအမြဲတမ်းစစ်ဆေးပါ ။ အသုံးပြုသူများမှထည့်သွင်းထားသောအချက်အလက်များအားလုံးတွင်အန္တရာယ်ရှိသည့်အကြောင်းအရာများအားလုံးပါ 0 င်ပြီး developer များပါဝင်နိုင်သည်။

  2. Proprocessing ထုတ်ပြန်ချက်များနှင့် parameter boding ကိုသုံးပါ ။ Preprocessing ထုတ်ပြန်ချက်များသည် SQL ထုတ်ပြန်ချက်များကိုတိုက်ရိုက်ဖြည့်ဆည်းပေးနိုင်သည်။

  3. ဒေတာဘေ့စ်အသုံးပြုသူခွင့်ပြုချက်ကိုကန့်သတ်ချက်များ - ဒေတာဘေ့စ်အကောင့်များသို့ခွင့်ပြုချက်များစွာကိုခွင့်မပြုရန်လိုအပ်သောလုပ်ငန်းများအတွက်လိုအပ်သောစစ်ဆင်ရေးများကိုသာခွင့်ပြုထားသင့်သည်။

  4. SQL query logs များကိုအသုံးပြုခြင်း - SQL query logs များကိုမှတ်တမ်းတင်ခြင်းနှင့်ခွဲခြမ်းစိတ်ဖြာခြင်းအားဖြင့် developer များသည်အလားအလာရှိသောအန္တရာယ်ရှိသောအပြုအမူများကိုရှာဖွေတွေ့ရှိနိုင်သည်။

Real_Query function ကိုခြုံငုံသုံးသပ်ချက်

Real_Query သည် SQL Query များကို execute လုပ်ရန်အသုံးပြု PHP တွင် MySQLI extension မှပေးသော function တစ်ခုဖြစ်သည်။ မူရင်း SQL မေးမြန်းမှုကိုသင်လုပ်ဆောင်ရန်လိုအပ်သည့်အခါသင်သည် Real_Query ကို သုံးနိုင်သည်။ သို့သော်အသုံးပြုသူ input ကိုမှန်ကန်စွာမလုပ်ဆောင်ပါက SQL Injection တွင်အားနည်းချက်ဖြစ်လာနိုင်သည်။ ထို့ကြောင့်, သင် အမှန်တကယ်ကို အသုံးပြုသောအခါသင်အပိုဂျိုးဇာဖြစ်ရမည်။

 <?php
$conn = new mysqli("localhost", "username", "password", "database");

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM users WHERE username = '".$_GET['username']."'";

if ($conn->real_query($sql)) {
    $result = $conn->use_result();
    while ($row = $result->fetch_assoc()) {
        echo "Username: " . $row['username'];
    }
}
?>

အထက်ပါကုဒ်တွင် SQL query statement သည် $ _GET [username 'ကိုမှအသုံးပြုသူထည့်သွင်းမှု] ကိုအသုံးပြုသည်။ အသုံးပြုသူသည်အန္တရာယ်ရှိသော SQL Code ကို 0 င် ရောက်သော်, ထို့ကြောင့် စစ်မှန်သော မလုပ်ဆောင်မီ, အသုံးပြုသူထည့်သွင်းမှုကိုလုပ်ဆောင်ရမည်။

SQL Injection ကိုမည်သို့ကာကွယ်နိုင်သနည်း။ Preprocessing ထုတ်ပြန်ချက်များကိုသုံးပါ

SQL ထိုးဆေးကိုကာကွယ်ရန်အထိရောက်ဆုံးနည်းလမ်းတစ်ခုမှာ ပြင်ဆင်ထားသောထုတ်ပြန်ချက်များကို အသုံးပြုရန်ဖြစ်သည်။ Preprocessing ထုတ်ပြန်ချက်များအရ SQL ထုတ်ပြန်ချက်များနှင့်အချက်အလက်များကိုခွဲထုတ်ထားပြီးဒေတာဘေ့စ်အင်ဂျင်သည်ဒေတာများကိုပုံမှန်တန်ဖိုးများအဖြစ်သတ်မှတ်ခြင်းမပြုဘဲပြုလုပ်လိမ့်မည်။ PHP ၏ MySQLI extension ကို အသုံးပြု. ၎င်းကိုအလွယ်တကူရရှိနိုင်သည်။

ပြင်ဆင် နှင့် bind_param ကို သုံးပါ

 <?php
$conn = new mysqli("localhost", "username", "password", "database");

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

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

if ($stmt->execute()) {
    $result = $stmt->get_result();
    while ($row = $result->fetch_assoc()) {
        echo "Username: " . $row['username'];
    }
}
?>

ဤဥပမာတွင် ကြိုတင်ပြင်ဆင်ထားသော လုပ်ဆောင်ချက်သည် SQL query ကိုအရင်ပြုစုသည်။ Bind_param function သည် query တွင်ရှိသော parameter များကို parameters များထံမှအသုံးပြုသူ၏ထည့်သွင်းမှုများကိုချည်နှောင်ထားသည်။ ဤနည်းအားဖြင့်အသုံးပြုသူမှထည့်သွင်းထားသောအချက်အလက်များကိုရှင်းရှင်းလင်းလင်းစာသားအဖြစ်သတ်မှတ်ခြင်း,

SQL ဆေးထိုးခြင်းကိုကာကွယ်ရန် real_query ကို သုံးပါ

သင် အမှန်တကယ်ကို သုံးရန်လိုအပ်ပါက input ကိုအန္တရာယ်ရှိသည့်ကုဒ်မပါ 0 င်စေရန်အသုံးပြုသူမှအချက်အလက်များကိုကိုယ်တိုင်ကိုယ်ကျမှလွတ်မြောက်ရန်သတိထားရမည်။ MySQLI သည် string အတွက်အထူးအက္ခရာများမှလွတ်မြောက်ရန် Real_escape_String function ကိုထောက်ပံ့ပေးသည်။

 <?php
$conn = new mysqli("localhost", "username", "password", "database");

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$username = $conn->real_escape_string($_GET['username']);
$sql = "SELECT * FROM users WHERE username = '$username'";

if ($conn->real_query($sql)) {
    $result = $conn->use_result();
    while ($row = $result->fetch_assoc()) {
        echo "Username: " . $row['username'];
    }
}
?>

Real_escape_String ဖြင့်ကျွန်ုပ်တို့သည် user inform တွင်အထူးအက္ခရာများမှလွတ်မြောက်ရန်အတွက်အန္တရာယ်ရှိသော SQL Code ကိုအကောင်အထည်ဖော်ရန်ရှောင်ရှားနိုင်သည်။ ဤချဉ်းကပ်နည်းသည် SQL Injection ၏အန္တရာယ်ကိုလျှော့ချနိုင်သော်လည်း၎င်းကိုလုံးဝရှောင်ရှားနိုင်မည်မဟုတ်ချေ။

အခြားကြိုတင်ကာကွယ်မှုများ

Real_Query နှင့် Preprocessing ထုတ်ပြန်ချက်များကိုအသုံးပြုခြင်းအပြင် SQL Injection ၏အန္တရာယ်ကိုလျှော့ချရန်အထောက်အကူပြုနိုင်သောနောက်ထပ်လုံခြုံရေးအစီအမံများရှိသည်။

  1. PDO (PHP Data Obserts) - PDO သည် PDO သည်ကြိုတင်မဆိုကြိုတင်ဖော်ပြထားသောထုတ်ပြန်ချက်များကိုထောက်ခံသည်။ MySqli ထက်ပိုမိုပြောင်းလွယ်ပြင်လွယ်ရှိပြီးဒေတာဘေ့စ်အမျိုးမျိုးအတွက်သင့်တော်သည်။

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

  3. အချိန်မီနောက်ဆုံးသတင်းများနှင့်ပြင်ဆင်ဖာထေးမှုများ

  4. Web application firewall (waf) ကိုဖွင့်ပါ

အကျဉ်းချုပ်

SQL Injection သည်အသုံးအများဆုံးဝက်ဘ်ဆိုက်တိုက်ခိုက်မှုတစ်ခုဖြစ်သည်။ PHP developer များသည်ဒေတာဘေ့စ်၏လုံခြုံရေးကိုသေချာစေရန်ထိရောက်သောဆောင်ရွက်မှုများပြုလုပ်ရမည်။ Real_Query နှင့် Preprocessing ထုတ်ပြန်ချက်များကိုမှန်ကန်စွာအသုံးပြုခြင်းအားဖြင့် SQL ဆေးထိုးခြင်းအန္တရာယ်ကိုထိရောက်စွာကာကွယ်နိုင်သည်။ ထို့အပြင် developer များက input ကိုအတည်ပြုခြင်း, ဒေတာဘေ့စ်ခွင့်ပြုချက်စီမံခန့်ခွဲမှုကဲ့သို့သောအခြားလုံခြုံရေးအစီအမံများနှင့်လုံခြုံရေးစနစ်၏လုံခြုံရေးကိုမြှင့်တင်ရန် Security Patch updates များကိုလည်းပေါင်းစပ်ထားသင့်သည်။

  • သက်ဆိုင်သောတက်(ဂ်)များ:

    SQL