Si e parandalon MySQL injeksionin sql? Parimi dhe parandalimi i injektimit SQL

MySQLSi të parandaloni injektimin sql? Parimi dhe parandalimi i injektimit SQL

MySQL dhe injeksion SQL

Nëse i merrni të dhënat e futura nga përdoruesi përmes një faqe interneti dhe i futni në aBaza e të dhënave MySQL, atëherë mund të ketë probleme sigurie të injektimit SQL.

Ky kapitull do t'ju prezantojë se si të parandaloni injektimin SQL dhe të përdorni skriptet për të filtruar karakteret e injektuara në SQL.

I ashtuquajturi injeksion SQL është për të mashtruar serverin për të ekzekutuar komanda me qëllim të keq SQL duke futur komanda SQL në formularin e internetit për të paraqitur ose futur vargun e pyetjes të emrit të domenit ose kërkesës së faqes.

Ne kurrë nuk duhet t'i besojmë hyrjes së përdoruesit, duhet të supozojmë se të dhënat hyrëse të përdoruesit janë të pasigurta dhe të gjithë ne duhet të filtrojmë të dhënat hyrëse të përdoruesit.

Në shembullin e mëposhtëm, emri i përdoruesit duhet të jetë një kombinim shkronjash, numrash dhe nënvizash, dhe emri i përdoruesit duhet të jetë nga 8 deri në 20 karaktere:

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

Le të hedhim një vështrim në situatën SQL që ndodh kur nuk filtrohen karaktere të veçanta:

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

Në deklaratën e mësipërme të injektimit, ne nuk filtruam ndryshoren e $name. Deklarata SQL që nuk na nevojitet është futur në $name, e cila do të fshijë të gjitha të dhënat në tabelën e përdoruesve.

mysqli_query() në PHP nuk lejohet të ekzekutojë deklarata të shumta SQL, por SQLite dhe PostgreSQL mund të ekzekutojnë disa deklarata SQL në të njëjtën kohë, kështu që ne duhet të verifikojmë rreptësisht të dhënat e këtyre përdoruesve.

Për të parandaluar injektimin SQL, duhet t'i kushtojmë vëmendje pikave të mëposhtme:

  • 1. Asnjëherë mos i besoni hyrjes së përdoruesit.Kontrolloni hyrjen e përdoruesit, mund të përdorni shprehje të rregullta ose të kufizoni gjatësinë; konvertoni thonjëza të vetme dhe dyfish "-", etj.
  • 2. Asnjëherë mos përdorni sql dinamike të montimit, mund të përdorni sql të parametrizuar ose të përdorni drejtpërdrejt procedurat e ruajtura për kërkimin dhe aksesin e të dhënave.
  • 3. Asnjëherë mos përdorni lidhjet e bazës së të dhënave me privilegje administratori, përdorni lidhje të veçanta të bazës së të dhënave me privilegje të kufizuara për çdo aplikacion.
  • 4. Mos ruani informacione konfidenciale drejtpërdrejt, mos kriptoni ose hasni fjalëkalime dhe informacione të ndjeshme.
  • 5. Informacioni i përjashtimit të aplikacionit duhet të japë sa më pak sugjerime të jetë e mundur dhe është më mirë të përdorni informacionin e personalizuar të gabimit për të mbështjellë informacionin origjinal të gabimit
  • 6. Metoda e zbulimit të injektimit sql në përgjithësi miraton ndihmëse软件Ose platforma e faqes së internetit për të zbuluar, softueri në përgjithësi përdor mjetin e zbulimit të injektimit sql jsky, platforma e internetit ka mjetin e zbulimit të platformës së sigurisë së faqes në internet Yisi. MDCSOFT SCAN et al.Përdorimi i MDCSOFT-IPS mund të mbrohet në mënyrë efektive kundër injektimit SQL, sulmeve XSS, etj.

Parandalimi i injektimit SQL

Në gjuhët e skriptimit si Perl dhe PHP, ju mund t'i ikni të dhënave të futura nga përdoruesi për të parandaluar injektimin e SQL.

Shtesa MySQL për PHP ofron funksionin mysqli_real_escape_string() për t'i shpëtuar karaktereve të veçanta hyrëse.

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

Injeksion në deklaratat e pëlqyera

Kur pyet si, nëse përdoruesi fut vlerat me "_" dhe "%", kjo do të ndodhë: përdoruesi fillimisht donte të kërkonte "abcd_", por rezultatet e pyetjes përfshijnë "abcd_", "abcde" dhe "abcdf". " Etj.; problemi shfaqet gjithashtu kur përdoruesi dëshiron të kërkojë "30%" (shënim: tridhjetë përqind).

Në një skript PHP ne mund të përdorim funksionin addcslashes() për të trajtuar situatën e mësipërme, si në shembullin e mëposhtëm:

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

Funksioni addcslashes() shton një vijë të prapme përpara karakterit të specifikuar.

Formati i sintaksës:

addcslashes(string,characters)
参数përshkrim
vargE detyrueshme.Specifikon vargun për të kontrolluar.
karaktereFakultative.Specifikon karakterin ose gamën e karaktereve të prekura nga addcslashes().

Blogu Hope Chen Weiliang ( https://www.chenweiliang.com/ ) shared "Si e parandalon MySQL injektimin sql? Parimi dhe parandalimi i injektimit sql”, do t'ju ndihmojë.

Mirë se vini të shpërndani lidhjen e këtij artikulli:https://www.chenweiliang.com/cwl-500.html

Mirësevini në kanalin Telegram të blogut të Chen Weiliang për të marrë përditësimet më të fundit!

🔔 Bëhu i pari që merr "Udhëzuesin e përdorimit të mjeteve të marketingut të përmbajtjes AI" me vlerë "ChatGPT Content Marketing AI" në drejtorinë kryesore të kanalit! 🌟
📚 Ky udhëzues përmban vlera të mëdha, 🌟Ky është një mundësi e rrallë, mos e humbisni! ⏰⌛💨
Shpërndaje dhe like nëse të pëlqen!
Ndarjet dhe pëlqimet tuaja janë motivimi ynë i vazhdueshëm!

 

发表 评论

Adresa juaj e emailit nuk do të publikohet. Përdoren fushat e kërkuara * Etiketa

lëvizni në krye