MySQL သည် sql ထိုးခြင်းကိုမည်သို့တားဆီးသနည်း။ SQL ဆေးထိုးခြင်းနိယာမနှင့်ကာကွယ်ခြင်း။

က MySQLsql ထိုးခြင်းကို ဘယ်လိုကာကွယ်မလဲ။ SQL ဆေးထိုးခြင်းနိယာမနှင့်ကာကွယ်ခြင်း။

က MySQL နှင့် SQL ထိုးခြင်း။

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

ဤအခန်းတွင် SQL ထိုးခြင်းကို တားဆီးနည်းနှင့် SQL တွင် ထိုးသွင်းထားသော စာလုံးများကို script များမှတဆင့် စစ်ထုတ်နည်းကို မိတ်ဆက်ပေးပါမည်။

SQL Injection ဟုခေါ်သည် သည် ဒိုမိန်းအမည် သို့မဟုတ် စာမျက်နှာတောင်းဆိုမှု၏ query string ကို တင်သွင်းရန် သို့မဟုတ် ထည့်သွင်းရန် ဝဘ်ဖောင်ထဲသို့ SQL ညွှန်ကြားချက်များကို ထည့်သွင်းခြင်းဖြင့် အန္တရာယ်ရှိသော SQL အမိန့်များကို လုပ်ဆောင်ရန် ဆာဗာကို လှည့်ဖြားရန်ဖြစ်သည်။

ကျွန်ုပ်တို့သည် အသုံးပြုသူထည့်သွင်းမှုကို ဘယ်တော့မှ မယုံကြည်သင့်ပါ၊ အသုံးပြုသူထည့်သွင်းမှုဒေတာသည် အန္တရာယ်ကင်းသည်ဟု ကျွန်ုပ်တို့ယူဆရမည်ဖြစ်ပြီး ကျွန်ုပ်တို့အားလုံးသည် အသုံးပြုသူထည့်သွင်းမှုဒေတာကို စစ်ထုတ်ရန် လိုအပ်ပါသည်။

အောက်ပါဥပမာတွင်၊ ထည့်သွင်းအသုံးပြုသူအမည်သည် အက္ခရာများ၊ နံပါတ်များနှင့် အောက်ခံအမှတ်များပေါင်းစပ်ထားရမည်ဖြစ်ပြီး အသုံးပြုသူအမည်သည် စာလုံးရေ 8 နှင့် 20 ကြား ရှည်ရမည်-

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysqli_query($conn, "SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

အထူးအက္ခရာများကို စစ်ထုတ်ခြင်းမပြုသောအခါ ဖြစ်ပေါ်လာသည့် SQL အခြေအနေကို ကြည့်ကြပါစို့။

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

အထက်ဖော်ပြပါ ထိုးဆေးထုတ်ပြန်ချက်တွင်၊ ကျွန်ုပ်တို့သည် $name ၏ variable ကို စစ်ထုတ်ခြင်းမပြုခဲ့ပါ။ ကျွန်ုပ်တို့မလိုအပ်သော SQL ကြေညာချက်ကို $name တွင် ထည့်သွင်းထားပြီး၊ သုံးစွဲသူများဇယားရှိ အချက်အလက်အားလုံးကို ဖျက်ပစ်မည်ဖြစ်သည်။

PHP တွင် mysqli_query() သည် SQL ထုတ်ပြန်ချက်အများအပြားကို လုပ်ဆောင်ရန် ခွင့်မပြုသော်လည်း SQLite နှင့် PostgreSQL တွင်၊ တစ်ချိန်တည်းတွင် SQL ထုတ်ပြန်ချက်အများအပြားကို လုပ်ဆောင်နိုင်သည်၊ ထို့ကြောင့် ဤအသုံးပြုသူများ၏ဒေတာကို တင်းကြပ်စွာစစ်ဆေးရန် လိုအပ်ပါသည်။

SQL ထိုးခြင်းကို ကာကွယ်ရန်၊ အောက်ပါအချက်များကို အာရုံစိုက်ရန် လိုအပ်ပါသည်။

  • 1. အသုံးပြုသူ ထည့်သွင်းမှုကို ဘယ်တော့မှ မယုံပါနဲ့။အသုံးပြုသူ၏ထည့်သွင်းမှုကိုစစ်ဆေးပါ၊ သင်သည်ပုံမှန်အသုံးအနှုန်းများကိုသုံးနိုင်သည်၊ သို့မဟုတ်အရှည်ကိုကန့်သတ်နိုင်သည်၊ တစ်ခုတည်းကိုးကားချက်နှစ်ဆ "-" စသည်တို့ကိုပြောင်းပါ။
  • 2. dynamic assembly sql ကို ဘယ်တော့မှ မသုံးပါ၊ သင်သည် parameterized sql ကိုသုံးနိုင်သည် သို့မဟုတ် data query နှင့် access အတွက် သိမ်းဆည်းထားသော လုပ်ထုံးလုပ်နည်းများကို တိုက်ရိုက်သုံးနိုင်သည်။
  • 3. စီမံခန့်ခွဲသူအခွင့်ထူးများဖြင့် ဒေတာဘေ့စ်ချိတ်ဆက်မှုများကို ဘယ်တော့မှအသုံးမပြုပါနှင့်၊ အပလီကေးရှင်းတစ်ခုစီအတွက် ကန့်သတ်အခွင့်အရေးများနှင့်အတူ သီးခြားဒေတာဘေ့စ်ချိတ်ဆက်မှုများကို အသုံးပြုပါ။
  • 4. လျှို့ဝှက်အချက်အလက်များကို တိုက်ရိုက်သိမ်းဆည်းခြင်း၊ စကားဝှက်များနှင့် အရေးကြီးသော အချက်အလက်များကို ကုဒ်ဝှက်ခြင်း သို့မဟုတ် ဖျက်ခြင်းမပြုပါနှင့်။
  • 5. အပလီကေးရှင်း၏ခြွင်းချက်အချက်အလက်သည် တတ်နိုင်သမျှအနည်းငယ်သောအရိပ်အမြွက်ပေးသင့်ပြီး မူရင်းအမှားအချက်အလက်ကိုခြုံငုံရန် စိတ်ကြိုက်အမှားအချက်အလက်ကိုအသုံးပြုခြင်းသည် အကောင်းဆုံးဖြစ်သည်။
  • 6. sql ထိုးဆေး၏ ထောက်လှမ်းမှုနည်းလမ်းသည် ယေဘုယျအားဖြင့် အရန်ကို လက်ခံသည်။Software များသို့မဟုတ် သိရှိရန် ဝဘ်ဆိုဒ်ပလပ်ဖောင်း၊ ဆော့ဖ်ဝဲလ်သည် ယေဘူယျအားဖြင့် sql ထိုးဆေးရှာဖွေခြင်းကိရိယာ jsky ကိုအသုံးပြုသည်၊ ဝဘ်ဆိုက်ပလပ်ဖောင်းတွင် Yisi ဝဘ်ဆိုဒ်လုံခြုံရေးပလပ်ဖောင်းကို ထောက်လှမ်းသည့်ကိရိယာပါရှိသည်။ MDCSOFT SCAN et al.MDCSOFT-IPS ကိုအသုံးပြုခြင်းဖြင့် SQL ထိုးခြင်း၊ XSS တိုက်ခိုက်မှုစသည်တို့ကို ထိရောက်စွာခုခံကာကွယ်နိုင်သည်။

SQL Injection ကိုကာကွယ်ပါ။

Perl နှင့် PHP ကဲ့သို့သော scripting languages ​​များတွင် SQL ထိုးခြင်းကိုကာကွယ်ရန်အသုံးပြုသူမှထည့်သွင်းထားသောဒေတာကိုသင်လွတ်မြောက်နိုင်သည်။

PHP အတွက် MySQL တိုးချဲ့မှုသည် အထူးထည့်သွင်းစာလုံးများကို လွတ်ကင်းစေရန် mysqli_real_escape_string() လုပ်ဆောင်ချက်ကို ပံ့ပိုးပေးသည်။

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysqli_real_escape_string($conn, $name);
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

Like Statements တွင် ထိုးခြင်း။

ကဲ့သို့သောမေးမြန်းမှုတွင်၊ အသုံးပြုသူသည် "_" နှင့် "%" ဖြင့်တန်ဖိုးများကိုထည့်သွင်းပါက၊ ၎င်းသည်ဖြစ်သွားလိမ့်မည်- အသုံးပြုသူသည် မူလက "abcd_" ကိုမေးမြန်းလိုသော်လည်း၊ မေးမြန်းမှုရလဒ်များတွင် "abcd_", "abcde" နှင့် "abcdf" ပါဝင်သည်။ " စသည်ဖြင့်။ သုံးစွဲသူက "30%" (မှတ်ချက်- သုံးဆယ်ရာခိုင်နှုန်း) ကို မေးမြန်းလိုသည့်အခါတွင်လည်း ပြဿနာ ဖြစ်ပေါ်ပါသည်။

PHP script တွင် အောက်ပါ ဥပမာအတိုင်း အထက်ဖော်ပြပါ အခြေအနေကို ကိုင်တွယ်ရန် addcslashes() လုပ်ဆောင်ချက်ကို ကျွန်ုပ်တို့ အသုံးပြုနိုင်ပါသည်။

$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_");
// $sub == \%something\_
 mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

addcslashes() လုပ်ဆောင်ချက်သည် သတ်မှတ်ထားသော စာလုံးရှေ့တွင် backslash ကို ပေါင်းထည့်သည်။

Syntax ဖော်မတ်-

addcslashes(string,characters)
Parameterဖော်ပြချက်
ကြိုးလိုအပ်သည်။စစ်ဆေးရန် စာကြောင်းကို သတ်မှတ်သည်။
ဇာတ်ကောင်ရွေးချယ်ခွင့်addcslashes().

မျှော်လင့်ခြင်း Chen Weiliang ဘလော့ဂ် ( https://www.chenweiliang.com/ ) shared "MySQL သည် sql ထိုးခြင်းကို မည်သို့တားဆီးသနည်း။ sql ဆေးထိုးခြင်းနိယာမနှင့်ကာကွယ်ခြင်း" သည်သင့်အားကူညီလိမ့်မည်။

ဤဆောင်းပါး၏ link ကိုမျှဝေရန်ကြိုဆိုပါတယ်:https://www.chenweiliang.com/cwl-500.html

နောက်ထပ်လျှို့ဝှက်လှည့်ကွက်များကိုသော့ဖွင့်ရန်🔑၊ ကျွန်ုပ်တို့၏ Telegram ချန်နယ်တွင် ပါဝင်ရန် ကြိုဆိုလိုက်ပါ။

ကြိုက်ရင် Share ပြီး Like လုပ်ပါ။ သင်၏ မျှဝေမှုများနှင့် ကြိုက်နှစ်သက်မှုများသည် ကျွန်ုပ်တို့၏ ဆက်လက်လှုံ့ဆော်မှုဖြစ်သည်။

 

မှတ်ချက်များ

သင့်အီးမေးလ်လိပ်စာကို ထုတ်ပြန်မည်မဟုတ်ပါ။ 用项已用用 * တံဆိပ်

ထိပ်တန်းမှလှိမ့်