PHP ၏ဝဘ်ဆိုက်ဖွံ့ဖြိုးတိုးတက်မှုတွင် SQL Injection သည်သာမန်နှင့်အန္တရာယ်ရှိသောလုံခြုံရေးခြိမ်းခြောက်မှုတစ်ခုဖြစ်သည်။ SQL ထိုးဆေးကိုထိရောက်စွာကာကွယ်ရန်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များ, parameter binding နှင့်အခြားနည်းလမ်းများသုံးခြင်းအပြင်ဒေတာဘေ့စ်ဆက်သွယ်မှုမှအသုံးပြုသောဇာတ်ကောင်သည်အရေးပါသော link တစ်ခုဖြစ်စေနိုင်သည်။ ဤဆောင်းပါးသည် MySQLI :: Get_charet ၏အသုံးပြုမှုနှင့် SQL Injection ကိုကာကွယ်ရန်၎င်း၏အခန်းကဏ် to ကိုအာရုံစိုက်မည်။
MySQLI :: Get_charset သည်လက်ရှိဒေတာဘေ့စ်ဆက်သွယ်မှု၏ပုံသဏ္ဌာန်တော်၏အချက်အလက်များကိုရယူရန် PHP MySQLI extension မှပေးသောနည်းလမ်းဖြစ်သည်။ ဇာတ်ကောင်သတ်မှတ်ခြင်းအမည်, encoding စသည့်စာလုံးအသေးများပါ 0 င်သည့်အရာဝတ်ထုတစ်ခုကိုပြန်လည်ရောက်ရှိစေသည်။
ဇာတ်ကောင်အစုံသည်ဒေတာဘေ့စ်လုံခြုံရေးအတွက်အရေးကြီးသောအခန်းကဏ် play မှပါ 0 င်သောကြောင့် Clarter Sets ကိုစနစ်တကျမသတ်မှတ်ထားပါကတိုက်ခိုက်သူသည် input input disport များကိုကျော်လွှားရန် encoding ကွဲပြားခြားနားမှုများကိုသုံးနိုင်သည်။
ဥပမာ MySQL သည် လက်တင်နံပါတ် encoding ကိုပုံမှန်အားဖြင့်အသုံးပြုသည်။ အကယ်. သုံးစွဲသူသည် UTF8 ဒေတာများကိုတင်သွင်းပါကဆာဗာသည် လက်တင်ကို သုံး. ၎င်းကိုခွဲခြမ်းစိတ်ဖြာရန်အသုံးပြုသည်,
အခြေခံဥပမာကိုအရင်ကြည့်ကြစို့။
<?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 ဖြစ်သည်။
Client မှပေးပို့သောအချက်အလက်များကို 0 န်ဆောင်မှုခံယူသည့်အချက်အလက်များကိုဆာဗာမည်သို့နားလည်သည်ကိုမည်သို့နားလည်သည်ကိုသက်ရောက်သည်။ အကယ်. ဒေတာဘေ့စ်ဆက်သွယ်မှုသည် လက်တင်နံပါတ်ကို အသုံးပြုသော်လည်း Input data များသည် Multibyte ဇာတ်ကောင်များပါ 0 င်ပါက Byte sete sete sete sequence များသည် SQL Controls ဇာတ်ကောင်များအဖြစ်နားလည်မှုလွဲနိုင်သည်။
Get_Charet ကို အသုံးပြု. ဆက်သွယ်မှုသည်လုံခြုံစိတ်ချရသောဇာတ်ကောင် set ( UTF8MB4 ကိုအကြံပြုသည်) ကိုစစ်ဆေးရန် (UTF8MB4 အကြံပြုသည်) ကိုစစ်ဆေးရန် (UTF8MB4 ကိုအကြံပြုသည်) ကိုစစ်ဆေးရန်အန္တရာယ်ရှိနိုင်သည်။
အောက်ပါကုဒ်သည်အပြည့်အဝမြင်ကွင်းကိုပြသသည်။
<?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 များအသုံးပြုသည်။