Kako MySQL sprječava sql injection? Princip i prevencija SQL injekcije

MySQLKako spriječiti sql injection? Princip i prevencija SQL injekcije

MySQL i SQL injekcija

Ako uzmete podatke koje korisnik unese putem web stranice i umetnete ih u aMySQL baza podataka, onda može doći do sigurnosnih problema s SQL ubacivanjem.

Ovo poglavlje će vas upoznati kako spriječiti SQL ubacivanje i koristiti skripte za filtriranje umetnutih znakova u SQL.

Takozvana SQL injekcija služi za prevaru poslužitelja da izvrši zlonamjerne SQL naredbe umetanjem SQL naredbi u web obrazac za podnošenje ili unos niza upita naziva domene ili zahtjeva stranice.

Nikada ne bismo trebali vjerovati korisničkom unosu, moramo pretpostaviti da korisnički unos podataka nije siguran i svi moramo filtrirati korisničke unose.

U sljedećem primjeru uneseno korisničko ime mora biti kombinacija slova, brojeva i podvlaka, a korisničko ime mora imati između 8 i 20 znakova:

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

Pogledajmo SQL situaciju koja se događa kada nema filtriranja posebnih znakova:

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

U gornjoj izjavi o ubacivanju nismo filtrirali varijablu $name. SQL izjava koja nam nije potrebna umetnuta je u $name, što će izbrisati sve podatke u tablici korisnika.

mysqli_query() u PHP-u ne smije izvršavati više SQL naredbi, ali SQLite i PostgreSQL mogu izvršavati više SQL naredbi u isto vrijeme, tako da moramo strogo provjeriti podatke tih korisnika.

Kako bismo spriječili SQL ubacivanje, moramo obratiti pozornost na sljedeće točke:

  • 1. Nikad ne vjerujte korisničkom unosu.Provjerite korisnički unos, možete koristiti regularne izraze ili ograničiti duljinu; pretvorite jednostruke navodnike i dvostruke "-" itd.
  • 2. Nikada nemojte koristiti dinamički asemblerski sql, možete koristiti parametrizirani sql ili izravno koristiti pohranjene procedure za upite i pristup podacima.
  • 3. Nikada nemojte koristiti veze s bazom podataka s administratorskim ovlastima, koristite zasebne veze s bazom podataka s ograničenim ovlastima za svaku aplikaciju.
  • 4. Nemojte izravno pohranjivati ​​povjerljive informacije, šifrirati ili raspršivati ​​lozinke i osjetljive informacije.
  • 5. Informacije o iznimci aplikacije trebale bi dati što je moguće manje savjeta, a najbolje je koristiti prilagođene informacije o pogrešci za omotavanje izvornih informacija o pogrešci
  • 6. Metoda otkrivanja sql injekcije općenito usvaja pomoćne软件Ili platforma web stranice za otkrivanje, softver općenito koristi alat za otkrivanje sql injection jsky, platforma web stranice ima Yisi alat za otkrivanje sigurnosne platforme web stranice. MDCSOFT SCAN i sur.Korištenje MDCSOFT-IPS-a može se učinkovito obraniti od SQL injekcije, XSS napada itd.

Spriječite SQL ubacivanje

U skriptnim jezicima kao što su Perl i PHP možete izbjeći podatke koje je unio korisnik kako biste spriječili ubacivanje SQL-a.

MySQL proširenje za PHP pruža funkciju mysqli_real_escape_string() za izbjegavanje posebnih znakova unosa.

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

Injekcija u Like izjavama

Prilikom postavljanja upita, ako korisnik unese vrijednosti s "_" i "%", ovo će se dogoditi: korisnik je izvorno želio postaviti upit "abcd_", ali rezultati upita uključuju "abcd_", "abcde" i "abcdf " Itd.; problem se javlja i kada korisnik želi postaviti upit "30%" (napomena: trideset posto).

U PHP skripti možemo koristiti funkciju addcslashes() za rješavanje gornje situacije, kao u sljedećem primjeru:

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

Funkcija addcslashes() dodaje obrnutu kosu crtu ispred navedenog znaka.

Format sintakse:

addcslashes(string,characters)
参数opis
nizPotreban.Određuje niz za provjeru.
znakovaNeobavezno.Određuje znak ili raspon znakova na koje utječe addcslashes().

Blog Hope Chen Weiliang ( https://www.chenweiliang.com/ ) dijeli "Kako MySQL sprječava sql injection? sql injection princip i prevencija", pomoći će vam.

Dobrodošli da podijelite vezu ovog članka:https://www.chenweiliang.com/cwl-500.html

Dobro došli na Telegram kanal Chen Weiliangovog bloga da dobijete najnovija ažuriranja!

🔔 Budite prvi koji će dobiti vrijedan "Vodič za korištenje AI alata za marketing sadržaja ChatGPT" u direktoriju na vrhu kanala! 🌟
📚 Ovaj vodič ima veliku vrijednost, 🌟 Ovo je rijetka prilika, nemojte je propustiti! ⏰⌛💨
Podijelite i lajkajte ako vam se sviđa!
Vaše dijeljenje i lajkovi naša su stalna motivacija!

 

发表 评论

Vaša email adresa neće biti objavljena. Koriste se obavezna polja * Označiti

pomaknite se na vrh