SQL Injection တိုက်ခိုက်မှုများသည်ဘုံနှင့်အလွန်အမင်းခြိမ်းခြောက်နေသောလုံခြုံရေးအားနည်းချက်များဖြစ်သည်။ တိုက်ခိုက်သူသည်ဤအားနည်းချက်ကိုဒေတာဘေ့စ်ထဲသို့ထိုးသွင်းထားသည့်ကုဒ်များကိုထိုးသွင်းရန်ဤအားနည်းချက်ကိုအသုံးချသည်။ PHP form processing တွင် SQL injection တိုက်ခိုက်မှုများကိုထိထိရောက်ရောက်ကာကွယ်ရန်သော့ချက်မှာအသုံးပြုသူများမှထည့်သွင်းထားသောအချက်အလက်များကိုအတိအကျစစ်ထုတ်ရန်နှင့် encode လုပ်ရန်ဖြစ်သည်။ ဤဆောင်းပါးသည် SQL Injection တိုက်ခိုက်မှုများကိုမည်သို့ကာကွယ်နိုင်သည်ကိုအသေးစိတ်ရှင်းပြပြီးကုဒ်သင်္ကေတများနှင့်ပေါင်းစပ်ညှိနှိုင်းမှုများကိုအသေးစိတ်ရှင်းပြပါမည်။
Preprocessing ထုတ်ပြန်ချက်များသည် SQL Injection ကိုထိရောက်စွာကာကွယ်နိုင်ရန်အတွက်ဒေတာဘေ့စ်ဆာဗာသို့ SQL ထုတ်ပြန်ချက်များကိုကြိုတင်ပေးပို့သည့်နည်းပညာများဖြစ်သည်။ ၎င်းသည်အသုံးပြုသူထည့်သွင်းအချက်အလက်များကို SQL ထုတ်ပြန်ချက်များမှ Parameterized မေးမြန်းချက်များမှတဆင့် SQL ထုတ်ပြန်ချက်များမှခွဲခြား ထား. အန္တရာယ်ရှိသောအချက်အလက်များကိုဆေးထိုးခြင်းကိုရှောင်ရှားသည်။ PHP တွင် PDO သည်အဆင်ပြေသောကြိုတင်သတ်မှတ်ထားသည့်ဖော်ပြချက်လုပ်ဆောင်နိုင်စွမ်းကိုထောက်ပံ့ပေးသည်။ အောက်ပါအချက်များသည်အကောင်အထည်ဖော်မှုအတွက်ဥပမာဖြစ်သည်။
// ဒေတာဘေ့စ်ကိုဆက်သွယ်ပါ
$dsn = 'mysql:host=localhost;dbname=test';
$username = 'root';
$password = 'password';
try {
$pdo = new PDO($dsn, $username, $password);
// ချွင်းချက်မှအမှား mode ကိုသတ်မှတ်ပါ
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'ဒေတာဘေ့စဆက်သွယ်မှုမအောင်မြင်ပါ:' . $e->getMessage();
}
// ပြင်ဆင်ထားSQLအသေအချာပေြာဆိုချက်
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
// parameters တွေကိုချည်ထား
$stmt->bindParam(':username', $username);
// တစ် ဦး စုံစမ်းမှု execute
$stmt->execute();
// ရလဒ်များကိုရယူပါ
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// ရလဒ်ရလဒ်
foreach ($result as $row) {
echo $row['username'];
}
ဤကုဒ်တွင်ပထမ ဦး စွာ SQL ၏ထုတ်ပြန်ကြေငြာချက်ကိုပြင်ဆင်ခြင်း () method method နှင့် placeholder: Username: အသုံးပြုသူအမည်အစားအသုံးပြုသူအမည်ကိုအသုံးပြုသည်။ အမှန်တကယ်အသုံးပြုသူအမည်ကို binparam method () method မှတဆင့် placeholder မှခညျြနှောငျထားပြီးနောက်ဆုံးတွင် query data ကို SQL ကြေညာချက်သို့တိုက်ရိုက်ဖြည့်ဆည်းပေးခြင်းကိုရှောင်ရှားသည်။
PHP သည် SQL ဆေးထိုးတိုက်ခိုက်မှုများကိုဖြစ်ပေါ်စေသည့်အထူးအက္ခရာများနှင့် SQL သော့ချက်စာလုံးများကိုဖယ်ရှားခြင်းအတွက်သန့်ရှင်းရေးနှင့် filter filter များကို filtering forction အမျိုးမျိုးကိုထောက်ပံ့ပေးသည်။ MySQLI_REAL_Sescape_String () သည်အသုံးပြုသူများမှ 0 င်ရောက်ခြင်းနှင့်အထူးအက္ခရာများမှအထူးအက္ခရာများ၏အကျိုးသက်ရောက်မှုကိုရှောင်ရှားနိုင်သည့် mysqli_eal_Sting function သည်အသုံးပြုသော filtering function တစ်ခုဖြစ်သည်။ ဤလုပ်ဆောင်မှုကို အသုံးပြု. ကုဒ်နမူနာတစ်ခုရှိသည်။
// ဒေတာဘေ့စ်ကိုဆက်သွယ်ပါ
$servername = 'localhost';
$username = 'root';
$password = 'password';
$dbname = 'test';
$conn = mysqli_connect($servername, $username, $password, $dbname);
// ဆက်သွယ်မှုအောင်မြင်မှုရှိမရှိစစ်ဆေးပါ
if (!$conn) {
die('ဒေတာဘေ့စဆက်သွယ်မှုမအောင်မြင်ပါ: ' . mysqli_connect_error());
}
// အသုံးပြုသူ input အချက်အလက်များကို filter filter
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
// တစ် ဦး စုံစမ်းမှု execute
$sql = "SELECT * FROM users WHERE username = '{$username}' AND password = '{$password}'";
$result = mysqli_query($conn, $sql);
// အပြောင်းအလဲများရလဒ်များ
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
echo 'အသုံးပြုသူအမည်: ' . $row['username'];
}
} else {
echo 'မမှန်ကန်သောအသုံးပြုသူအမည်သို့မဟုတ်စကားဝှက်';
}
// ဆက်သွယ်မှုကိုပိတ်ပါ
mysqli_close($conn);
MySQLI_REAL_REAL_Sescape_String () function မှတဆင့်အသုံးပြုသူမှထည့်သွင်းထားသောအသုံးပြုသူအမည်နှင့်စကားဝှက်ကို filter လုပ်ပြီးအထူးအက္ခရာများသို့မဟုတ် SQL သော့ချက်စာလုံးများကိုရှောင်ရှားရန် SQL ဆေးထိုးတိုက်ခိုက်မှုများကိုတားဆီးနိုင်သည်။
PHP ပုံစံများတွင် SQL Injection တိုက်ခိုက်မှုများကိုကာကွယ်ရန်နည်းလမ်းများစွာရှိသည်။ အသုံးအများဆုံးနှင့်ထိရောက်သောမဟာဗျူဟာများသည်ကြိုတင်မဆိုထုတ်ပြန်ချက်များနှင့်စစ်ထုတ်ခြင်းလုပ်ငန်းများကိုအသုံးပြုသည်။ မည်သို့ပင်ဆိုစေကာမူအသုံးပြုသူများမှထည့်သွင်းထားသောအချက်အလက်အားလုံးကို 0 က်ဘ်ဆိုက်၏လုံခြုံရေးကိုသေချာစေရန်တိကျစွာစီစစ်ပြီး encoded လုပ်ရန်အရေးကြီးသည်။ developer များသည်လည်းဖြစ်နိုင်ချေရှိသောလုံခြုံရေးအန္တရာယ်များကိုချက်ချင်းပြင်ဆင်ရန်နှင့်အသုံးပြုသူအချက်အလက်နှင့်ဝက်ဘ်ဆိုက်သတင်းအချက်အလက်များကိုကာကွယ်ရန်အတွက်ပုံမှန်လုံခြုံရေးပြန်လည်သုံးသပ်ခြင်းနှင့်အားနည်းချက်များစကင်ဖတ်စစ်ဆေးမှုများပြုလုပ်သင့်သည်။