SQL Injection ကိုရှောင်ရှားခြင်းသည်လုံခြုံသောအသုံးပြုသူမှတ်ပုံတင်စနစ်တည်ဆောက်သည့်အခါထိပ်တန်း ဦး စားပေးများထဲမှတစ်ခုဖြစ်သည်။ MySQLI :: stmt_init function ကိုပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များနှင့်အတူအသုံးပြုခြင်းသည်အလွန်ထိရောက်သောနည်းလမ်းဖြစ်သည်။ ဤဆောင်းပါးသည်လုံခြုံစိတ်ချရသောအသုံးပြုသူမှတ်ပုံတင်ခြင်းလုပ်ငန်းစဉ်ကိုအကောင်အထည်ဖော်ရန် STACKLI :: stmt_init ကို မည်သို့အသုံးပြုရမည်ကိုတစ်ဆင့်ချင်းရှင်းပြရန်အပြည့်အဝဥပမာကိုအသုံးပြုလိမ့်မည်။
ပထမ ဦး စွာသင်၏ PHP ပတ် 0 န်းကျင်သည် MySQLI Extensive ပြုလုပ်နိုင်ရန်သေချာပါစေ။
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE
);
ဒေတာဘေ့စ်ဆက်သွယ်မှုကိုတည်ဆောက်ရန် MySQLI extension ကိုအသုံးပြုသည်။
$mysqli = new mysqli("localhost", "db_user", "db_pass", "my_database");
if ($mysqli->connect_error) {
die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $mysqli->connect_error);
}
အသုံးပြုသူများကိုလုံလုံခြုံခြုံမှတ်ပုံတင်ခြင်းအတွက်အပြည့်အစုံဖြစ်သည်။
// ဤသည်ပုံစံများမှယူဆတန်ဖိုးများကိုယူဆ,အခြေခံစိစစ်အတည်ပြုခြင်းနှင့် filtering လုပ်ဆောင်ရန်သတိရပါ
$username = trim($_POST['username']);
$password = $_POST['password'];
$email = trim($_POST['email']);
// စကားဝှက်စာဝှက်စနစ်(အသုံးပြု password_hash လုံခြုံရေးကိုတိုးတက်အောင်လုပ်ပါ)
$passwordHash = password_hash($password, PASSWORD_DEFAULT);
// ဖြစ်ပေါ်လာခြင်း statement ကန့်ကွက်
$stmt = $mysqli->stmt_init();
// ပြင်ဆင်ထား SQL အသေအချာပေြာဆိုချက်
if ($stmt->prepare("INSERT INTO users (username, password_hash, email) VALUES (?, ?, ?)")) {
// parameters တွေကိုချည်ထား(s ညှစ် string ပုံနှိပ်စာ)
$stmt->bind_param("sss", $username, $passwordHash, $email);
// 执行အသေအချာပေြာဆိုချက်
if ($stmt->execute()) {
echo "အောင်မြင်စွာမှတ်ပုံတင်!ကျွန်ုပ်တို့၏ပင်မစာမျက်နှာမှကြိုဆိုပါသည်:<a href='https://m66.net'>m66.net</a>";
} else {
echo "မှတ်ပုံတင်ခြင်းမအောင်မြင်ပါ:" . htmlspecialchars($stmt->error);
}
// ရုပ်သိမ်းခြင်း statement
$stmt->close();
} else {
echo "ပြင်ဆင်ထားအသေအချာပေြာဆိုချက်失败:" . htmlspecialchars($mysqli->error);
}
// ရုပ်သိမ်းခြင်း数据库连接
$mysqli->close();
MySQLi-> ပြင်ဆင်ရန် () ကို တိုက်ရိုက်သုံးနိုင်သည်။ MySQLI :: stmt_init သည် ပိုမိုလွယ်ကူစွာပြောင်းလွယ်ပြင်လွယ်ရှိကြောင်း, MySQLI_STMT အရာဝတ်ထုတစ်ခုကို သီးခြားစီ စတင်နိုင်ပြီး,
$stmt = $mysqli->stmt_init();
if (!$stmt->prepare($sql)) {
// ဒီဟာကမပါဘဲလုပ်ဆောင်နိုင်တယ် SQL syntax အမှားများကိုစစ်ဆေးပါသို့မဟုတ်၏ဝုဒ်အောက်မှာအခြား setting ကိုလုပ်ပါ
}
input အတည်ပြုခြင်းနှင့်သန့်ရှင်းရေးပြုလုပ်ခြင်း - တရားမ 0 င်သောစာလုံးများသို့မဟုတ်ဇာတ်ညွှန်းထိုးဆေးထိုးခြင်း။
စကားဝှက်လုံခြုံရေး - စကားဝှက်များကိုအတိအလင်းမသိမ်းဆည်းပါနှင့်။ _hash နှင့် password_verify ကို သုံးပါ။
ချို့ယွင်းချက် - သုံးစွဲသူများကိုဒေတာဘေ့စ်အမှားများကိုတိုက်ရိုက်ဖော်ထုတ်ခြင်းကိုရှောင်ပါ။
HTTPS Transfer : Transit ရှိအချက်အလက်များကိုကာကွယ်ရန်အတွက်မှတ်ပုံတင်ပုံစံကို HTTPS မှတစ်ဆင့်တင်သွင်းပါ။
MySQLI :: stmt_init ကို အသုံးပြု. Preprocessing ထုတ်ပြန်ချက်များသည်လုံခြုံစိတ်ချရသောအသုံးပြုသူမှတ်ပုံတင်စနစ်တည်ဆောက်ခြင်းအတွက်အရေးကြီးသောခြေလှမ်းတစ်ခုဖြစ်သည်။ လျှောက်လွှာရှုပ်ထွေးမှုတိုးပွားလာသည်နှင့်အမျှစာတိုက်ပုံးစစ်ဆေးခြင်းနှင့်ခြုံငုံလုံခြုံရေးကိုတိုးတက်စေရန် Multipi-Factor authentication စသည့်လုံခြုံရေးယန္တရားများပိုမိုများပြားနိုင်သည်။ သတိရပါ, ကုဒ်တိုင်းကိုလုံခြုံသည်ဟုယူဆသင့်သည်။
အသုံးပြုသူ login verification process လုပ်ငန်းစဉ်ကို ဆက်. နားလည်ချင်ပါသလား။