လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> SQL Injection ကိုကာကွယ်ရန် set ကိုစစ်ဆေးရန် MySQLI :: Get_charset ကိုသုံးပါ

SQL Injection ကိုကာကွယ်ရန် set ကိုစစ်ဆေးရန် MySQLI :: Get_charset ကိုသုံးပါ

M66 2025-05-25

PHP ၏ဝဘ်ဆိုက်ဖွံ့ဖြိုးတိုးတက်မှုတွင် SQL Injection သည်သာမန်နှင့်အန္တရာယ်ရှိသောလုံခြုံရေးခြိမ်းခြောက်မှုတစ်ခုဖြစ်သည်။ SQL ထိုးဆေးကိုထိရောက်စွာကာကွယ်ရန်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များ, parameter binding နှင့်အခြားနည်းလမ်းများသုံးခြင်းအပြင်ဒေတာဘေ့စ်ဆက်သွယ်မှုမှအသုံးပြုသောဇာတ်ကောင်သည်အရေးပါသော link တစ်ခုဖြစ်စေနိုင်သည်။ ဤဆောင်းပါးသည် MySQLI :: Get_charet ၏အသုံးပြုမှုနှင့် SQL Injection ကိုကာကွယ်ရန်၎င်း၏အခန်းကဏ် to ကိုအာရုံစိုက်မည်။

MySQLI :: Get_charset ဆိုတာဘာလဲ။

MySQLI :: Get_charset သည်လက်ရှိဒေတာဘေ့စ်ဆက်သွယ်မှု၏ပုံသဏ္ဌာန်တော်၏အချက်အလက်များကိုရယူရန် PHP MySQLI extension မှပေးသောနည်းလမ်းဖြစ်သည်။ ဇာတ်ကောင်သတ်မှတ်ခြင်းအမည်, encoding စသည့်စာလုံးအသေးများပါ 0 င်သည့်အရာဝတ်ထုတစ်ခုကိုပြန်လည်ရောက်ရှိစေသည်။

ဇာတ်ကောင်အစုံသည်ဒေတာဘေ့စ်လုံခြုံရေးအတွက်အရေးကြီးသောအခန်းကဏ် play မှပါ 0 င်သောကြောင့် Clarter Sets ကိုစနစ်တကျမသတ်မှတ်ထားပါကတိုက်ခိုက်သူသည် input input disport များကိုကျော်လွှားရန် encoding ကွဲပြားခြားနားမှုများကိုသုံးနိုင်သည်။

ဥပမာ MySQL သည် လက်တင်နံပါတ် encoding ကိုပုံမှန်အားဖြင့်အသုံးပြုသည်။ အကယ်. သုံးစွဲသူသည် UTF8 ဒေတာများကိုတင်သွင်းပါကဆာဗာသည် လက်တင်ကို သုံး. ၎င်းကိုခွဲခြမ်းစိတ်ဖြာရန်အသုံးပြုသည်,

MySQLI :: Get_charset ကို သုံး. ဇာတ်ကောင် set ကိုဘယ်လိုစစ်ဆေးရမလဲ။

အခြေခံဥပမာကိုအရင်ကြည့်ကြစို့။

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

// ဆက်သွယ်မှုအောင်မြင်မှုရှိမရှိစစ်ဆေးပါ
if ($mysqli->connect_errno) {
    die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $mysqli->connect_error);
}

// ဇာတ်ကောင်သတ်မှတ်ချက်သတင်းအချက်အလက်ရယူပါ
$charsetInfo = $mysqli->get_charset();

echo "လက်ရှိဆက်သွယ်မှုဖြင့်အသုံးပြုသောအက်ခရာအစု: " . $charsetInfo->charset;
?>

ဤ script သည် UTF8MB4 ကဲ့သို့သောလက်ရှိဒေတာဘေ့စ်ဆက်သွယ်မှု၏ဇာတ်ကောင်အစုကိုထုတ်ပေးသည်။ UTF8 အစား UTF8MB4 ကို သေချာစွာအသုံးပြုရန်သေချာစေရန်အတွက် UTF8 သည် MySQL တွင်သုံး byte encoding ဖြစ်ပြီး MySQL တွင်သုံး byte encoding တစ်ခုဖြစ်ပြီး Utf8MB4 သည် Full of Utf-8 encoding ဖြစ်သည်။

SQL Injection ကိုကာကွယ်ရန်ဇာတ်ကောင်များသည်အဘယ်ကြောင့်အရေးကြီးသနည်း။

Client မှပေးပို့သောအချက်အလက်များကို 0 န်ဆောင်မှုခံယူသည့်အချက်အလက်များကိုဆာဗာမည်သို့နားလည်သည်ကိုမည်သို့နားလည်သည်ကိုသက်ရောက်သည်။ အကယ်. ဒေတာဘေ့စ်ဆက်သွယ်မှုသည် လက်တင်နံပါတ်ကို အသုံးပြုသော်လည်း Input data များသည် Multibyte ဇာတ်ကောင်များပါ 0 င်ပါက Byte sete sete sete sequence များသည် SQL Controls ဇာတ်ကောင်များအဖြစ်နားလည်မှုလွဲနိုင်သည်။

Get_Charet ကို အသုံးပြု. ဆက်သွယ်မှုသည်လုံခြုံစိတ်ချရသောဇာတ်ကောင် set ( UTF8MB4 ကိုအကြံပြုသည်) ကိုစစ်ဆေးရန် (UTF8MB4 အကြံပြုသည်) ကိုစစ်ဆေးရန် (UTF8MB4 ကိုအကြံပြုသည်) ကိုစစ်ဆေးရန်အန္တရာယ်ရှိနိုင်သည်။

လက်တွေ့ကျတဲ့တိုက်ခိုက်ရေး - Get_charet နဲ့လုံခြုံရေးကာကွယ်မှုကိုဘယ်လိုသုံးရမလဲ။

အောက်ပါကုဒ်သည်အပြည့်အဝမြင်ကွင်းကိုပြသသည်။

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

// ဆက်သွယ်မှုကိုစစ်ဆေးပါ
if ($mysqli->connect_errno) {
    die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $mysqli->connect_error);
}

// ဇာတ်ကောင်အစုံစစ်ဆေးပါ
$charsetInfo = $mysqli->get_charset();
if ($charsetInfo->charset !== 'utf8mb4') {
    // အတင်းအကျပ် utf8mb4
    if (!$mysqli->set_charset("utf8mb4")) {
        die("ဇာတ်ကောင် set ကိုသတ်မှတ်မရနိုင်ပါ: " . $mysqli->error);
    }
    echo "ဇာတ်ကောင်အစုံမှ update လုပ်ထားပါတယ် utf8mb4\n";
} else {
    echo "လက်ရှိဇာတ်ကောင်အစုံဖြစ်ပါတယ် utf8mb4\n";
}

// Preprocessing ထုတ်ပြန်ချက်များကိုအသုံးပြု။ ဆေးထိုးကာကွယ်တားဆီး
$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");
if (!$stmt) {
    die("Preprocessing မအောင်မြင်ပါ: " . $mysqli->error);
}

// အသုံးပြုသူထည့်သွင်းမှုမှရရှိသောတန်ဖိုးကိုတုပပါ
$userInput = $_GET['email'] ?? '';

// parameters တွေကိုချည်နှောင်ခြင်းနှင့် execute
$stmt->bind_param("s", $userInput);
$stmt->execute();
$result = $stmt->get_result();

while ($row = $result->fetch_assoc()) {
    echo "အသုံးပြုသူ: " . htmlspecialchars($row['username']) . "\n";
}

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

ဤဥပမာတွင် Get_charset ကို သုံး. character set ကိုစစ်ဆေးရန်အတွက်ကျွန်ုပ်တို့သည် connection လုံခြုံမှုရှိစေရန် Set_charset ကိုလည်းသုံးပါ။ ထို့နောက် SQL strings များကိုခွဲခြားရန်မဖြစ်နိုင်သည့်ကြိုတင်သတ်မှတ်ထားသောထုတ်ပြန်ချက်များနှင့် parameter များအသုံးပြုသည်။