Kaip MySQL apsaugo nuo sql injekcijos? SQL įpurškimo principas ir prevencija

MySQLKaip išvengti sql injekcijos? SQL injekcijos principas ir prevencija

MySQL ir SQL injekcija

Jei paimsite vartotojo įvestus duomenis per tinklalapį ir įterpsite juos į aMySQL duomenų bazė, gali kilti SQL injekcijos saugos problemų.

Šiame skyriuje sužinosite, kaip išvengti SQL įterpimo ir naudoti scenarijus įterptiems simboliams SQL filtruoti.

Vadinamoji SQL injekcija skirta apgauti serverį, kad jis vykdytų kenkėjiškas SQL komandas, įterpiant SQL komandas į žiniatinklio formą, kad būtų pateikta arba įvedama domeno pavadinimo arba puslapio užklausos užklausos eilutė.

Niekada neturėtume pasitikėti vartotojo įvestimi, turime manyti, kad vartotojo įvesties duomenys yra nesaugūs, ir mes visi turime filtruoti vartotojo įvesties duomenis.

Šiame pavyzdyje įvestas naudotojo vardas turi būti sudarytas iš raidžių, skaičių ir apatinių brūkšnių, o naudotojo vardas turi būti nuo 8 iki 20 simbolių:

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

Pažvelkime į SQL situaciją, kuri atsiranda, kai nefiltruojami jokie specialieji simboliai:

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

Aukščiau pateiktame injekcijos sakinyje nefiltravome $name kintamojo, o mums nereikalingas SQL sakinys įterpiamas į $name, kuris ištrins visus duomenis iš vartotojų lentelės.

PHP mysqli_query() neleidžia vykdyti kelių SQL sakinių, tačiau SQLite ir PostgreSQL vienu metu gali būti vykdomi keli SQL sakiniai, todėl turime griežtai patikrinti šių vartotojų duomenis.

Norėdami išvengti SQL injekcijos, turime atkreipti dėmesį į šiuos dalykus:

  • 1. Niekada nepasitikėkite vartotojo įvestimi.Patikrinkite vartotojo įvestį, galite naudoti reguliariąsias išraiškas arba apriboti ilgį; konvertuoti pavienes kabutes ir dvigubas „-“ ir kt.
  • 2. Niekada nenaudokite dinaminio surinkimo sql, galite naudoti parametrizuotą sql arba tiesiogiai naudoti saugomas procedūras duomenų užklausai ir prieigai.
  • 3. Niekada nenaudokite duomenų bazių ryšių su administratoriaus teisėmis, naudokite atskirus duomenų bazių ryšius su ribotomis privilegijomis kiekvienai programai.
  • 4. Nesaugokite konfidencialios informacijos tiesiogiai, nešifruokite slaptažodžių ir neskelbtinos informacijos ir nenaudokite maišos.
  • 5. Programos išimties informacija turėtų pateikti kuo mažiau užuominų ir geriausia naudoti pasirinktinę klaidos informaciją, kad apvyniotų pradinę klaidos informaciją.
  • 6. SQL injekcijos aptikimo metodas paprastai naudojamas pagalbiniam软件Arba svetainės platforma aptikti, programinė įranga paprastai naudoja SQL injekcijos aptikimo įrankį jsky, svetainės platforma turi Yisi svetainės saugumo platformos aptikimo įrankį. MDCSOFT SCAN ir kt.Naudojant MDCSOFT-IPS galima veiksmingai apsisaugoti nuo SQL injekcijos, XSS atakų ir kt.

Užkirsti kelią SQL įpurškimui

Scenarijų kalbose, pvz., Perl ir PHP, galite išvengti vartotojo įvestų duomenų, kad išvengtumėte SQL injekcijos.

PHP MySQL plėtinys suteikia funkciją mysqli_real_escape_string(), kad būtų išvengta specialių įvesties simbolių.

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

Įpurškimas panašiuose teiginiuose

Kai užklausa kaip, jei vartotojas įveda reikšmes su „_“ ir „%“, taip atsitiks: vartotojas iš pradžių norėjo pateikti užklausą „abcd_“, tačiau užklausos rezultatai apima „abcd_“, „abcde“ ir „abcdf“. " Ir tt; problema taip pat kyla, kai vartotojas nori pateikti užklausą "30%" (pastaba: trisdešimt procentų).

PHP scenarijuje galime naudoti funkciją addcslashes() aukščiau nurodytai situacijai tvarkyti, kaip parodyta šiame pavyzdyje:

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

Funkcija addcslashes() prideda pasvirąjį brūkšnį prieš nurodytą simbolį.

Sintaksės formatas:

addcslashes(string,characters)
参数apibūdinimas
eilutėReikalingas.Nurodo eilutę, kurią reikia patikrinti.
ženklaiNeprivaloma.Nurodomas simbolis arba simbolių diapazonas, kurį paveikė addcslashes().

Hope Chen Weiliang tinklaraštis ( https://www.chenweiliang.com/ ) pasidalino „Kaip MySQL apsaugo nuo sql injekcijos? sql injekcijos principas ir prevencija“, tai jums padės.

Kviečiame pasidalinti šio straipsnio nuoroda:https://www.chenweiliang.com/cwl-500.html

Sveiki atvykę į Chen Weiliang tinklaraščio Telegram kanalą, kad gautumėte naujausius atnaujinimus!

🔔 Būkite pirmas, kuris kanalo viršaus kataloge gaus vertingą „ChatGPT turinio rinkodaros AI įrankio naudojimo vadovą“! 🌟
📚 Šis vadovas turi didžiulę vertę, 🌟Tai reta galimybė, nepraleiskite jos! ⏰⌛💨
Dalinkitės ir like jei patiko!
Jūsų dalijimasis ir paspaudimai „Patinka“ yra mūsų nuolatinė motyvacija!

 

发表 评论

Jūsų el. Pašto adresas nebus paskelbtas. Naudojami privalomi laukai * Etiketė

slinkite į viršų