MySQLKako preprečiti vbrizgavanje sql? Načelo vbrizgavanja SQL in preprečevanje
MySQL in vbrizgavanje SQL
Če vzamete podatke, ki jih uporabnik vnese prek spletne strani, in jih vstavite v aBaza podatkov MySQL, lahko pride do varnostnih težav z vstavljanjem SQL.
To poglavje vam bo predstavilo, kako preprečiti vstavljanje SQL in uporabiti skripte za filtriranje vbrizganih znakov v SQL.
Tako imenovana injekcija SQL je zavajanje strežnika, da izvede zlonamerne ukaze SQL, tako da v spletni obrazec vstavi ukaze SQL za oddajo ali vnos poizvedbenega niza imena domene ali zahteve strani.
Nikoli ne smemo zaupati uporabniškim vnosom, domnevati moramo, da uporabniški vnosni podatki niso varni, in vsi moramo filtrirati uporabniške vnosne podatke.
V naslednjem primeru mora biti vneseno uporabniško ime kombinacija črk, številk in podčrtajev, uporabniško ime pa mora biti dolgo med 8 in 20 znaki:
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) { $result = mysqli_query($conn, "SELECT * FROM users WHERE username=$matches[0]"); } else { echo "username 输入异常"; }
Oglejmo si situacijo SQL, do katere pride, ko posebni znaki niso filtrirani:
// 设定$name 中插入了我们不需要的SQL语句 $name = "Qadir'; DELETE FROM users;"; mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
V zgornjem stavku za vstavljanje nismo filtrirali spremenljivke $name.Stavek SQL, ki ga ne potrebujemo, je vstavljen v $name, kar bo izbrisalo vse podatke v tabeli uporabnikov.
mysqli_query() v PHP ne sme izvajati več stavkov SQL, v SQLite in PostgreSQL pa je mogoče hkrati izvesti več stavkov SQL, zato moramo podatke teh uporabnikov strogo preverjati.
Da bi preprečili vbrizgavanje SQL, moramo biti pozorni na naslednje točke:
- 1. Nikoli ne zaupajte uporabniškemu vnosu.Preverite uporabnikov vnos, lahko uporabite regularne izraze ali omejite dolžino; pretvorite enojne narekovaje in dvojne "-" itd.
- 2. Nikoli ne uporabljajte dinamičnega sestavljanja sql, lahko uporabite parametriran sql ali neposredno uporabite shranjene procedure za poizvedovanje in dostop do podatkov.
- 3. Nikoli ne uporabljajte povezav z bazo podatkov s skrbniškimi pravicami, uporabite ločene povezave z bazo podatkov z omejenimi pravicami za vsako aplikacijo.
- 4. Ne shranjujte zaupnih informacij neposredno, ne šifrirajte ali razkrivajte gesel in občutljivih informacij.
- 5. Podatki o izjemi aplikacije morajo vsebovati čim manj namigov in najbolje je, da uporabite podatke o napaki po meri, da zavijete izvirne informacije o napaki
- 6. Metoda odkrivanja vbrizgavanja sql na splošno uporablja pomožno软件Ali platforma spletnega mesta za zaznavanje, programska oprema običajno uporablja orodje za odkrivanje vbrizgavanja sql jsky, platforma spletnega mesta pa ima orodje za odkrivanje varnostne platforme spletnega mesta Yisi. MDCSOFT SCAN et al.Z uporabo MDCSOFT-IPS se lahko učinkovito zaščitite pred vbrizgavanjem SQL, napadi XSS itd.
Prepreči vbrizgavanje SQL
V skriptnih jezikih, kot sta Perl in PHP, lahko uidete podatkom, ki jih vnese uporabnik, da preprečite vstavljanje SQL.
Razširitev MySQL za PHP ponuja funkcijo mysqli_real_escape_string() za izhod iz posebnih vhodnih znakov.
if (get_magic_quotes_gpc()) { $name = stripslashes($name); } $name = mysqli_real_escape_string($conn, $name); mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
Vbrizgavanje v izjave Like
Pri poizvedbi, kot je, če uporabnik vnese vrednosti z "_" in "%", se bo to zgodilo: uporabnik je prvotno želel poizvedovati "abcd_", vendar rezultati poizvedbe vključujejo "abcd_", "abcde" in "abcdf " Itd.; težava se pojavi tudi, ko uporabnik želi poizvedovati "30%" (opomba: trideset odstotkov).
V skriptu PHP lahko uporabimo funkcijo addcslashes() za obravnavo zgornje situacije, kot v naslednjem primeru:
$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_"); // $sub == \%something\_ mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
Funkcija addcslashes() doda poševnico nazaj pred navedeni znak.
Format sintakse:
addcslashes(string,characters)
| 参数 | opis |
|---|---|
| niz | Obvezno.Podaja niz za preverjanje. |
| znaki | Neobvezno.Podaja znak ali obseg znakov, na katere vpliva addcslashes(). |
Blog Hope Chen Weiliang ( https://www.chenweiliang.com/ ) je delil "Kako MySQL prepreči vbrizgavanje sql? načelo vbrizgavanja sql in preprečevanje", vam bo pomagal.
Dobrodošli, da delite povezavo tega članka:https://www.chenweiliang.com/cwl-500.html
Če želite odkleniti več skritih trikov🔑, se pridružite našemu Telegram kanalu!
Delite in všečkajte, če vam je všeč! Vaše delitve in všečki so naša nadaljnja motivacija!