Kuidas MySQL takistab SQL-i süstimist? SQL-i süstimise põhimõte ja vältimine

MySQLKuidas vältida SQL-i süstimist? SQL-i süstimise põhimõte ja ennetamine

MySQL ja SQL-i süstimine

Kui võtate kasutaja sisestatud andmed läbi veebilehe ja sisestate need aMySQL andmebaas, siis võib esineda SQL-i sisestamise turbeprobleeme.

Selles peatükis tutvustatakse, kuidas SQL-i sisestamist vältida ja SQL-i sisestatud märke skriptide kaudu filtreerida.

Niinimetatud SQL-i süstimine on serveri petmine täitma pahatahtlikke SQL-käske, sisestades veebivormi SQL-käsud, et esitada või sisestada domeeninime või lehepäringu päringutring.

Me ei tohiks kunagi usaldada kasutaja sisendit, peame eeldama, et kasutaja sisendandmed on ebaturvalised ja me kõik peame kasutaja sisendandmeid filtreerima.

Järgmises näites peab sisestatud kasutajanimi olema tähtede, numbrite ja allkriipsude kombinatsioon ning kasutajanimi peab olema 8–20 tähemärgi pikkune.

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

Vaatame SQL-i olukorda, mis tekib siis, kui erimärke ei filtreerita:

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

Ülaltoodud süstimislauses me ei filtreerinud muutujat $name ja SQL-lause, mida me ei vaja, sisestatakse kausta $name, mis kustutab kõik kasutajate tabelis olevad andmed.

Mysqli_query() PHP-s ei tohi käivitada mitut SQL-lauset, kuid SQLite'is ja PostgreSQL-is saab korraga käivitada mitu SQL-lauset, seega peame nende kasutajate andmeid rangelt kontrollima.

SQL-i süstimise vältimiseks peame pöörama tähelepanu järgmistele punktidele:

  • 1. Ärge kunagi usaldage kasutaja sisestust.Kontrollige kasutaja sisendit, saate kasutada regulaaravaldisi või piirata pikkust; teisendada üksikuid jutumärke ja topeltmärke "-" jne.
  • 2. Ärge kunagi kasutage dünaamilist montaaži SQL-i, võite kasutada parameetritega SQL-i või otse salvestatud protseduure andmete päringute ja juurdepääsu jaoks.
  • 3. Ärge kunagi kasutage administraatoriõigustega andmebaasiühendusi, kasutage iga rakenduse jaoks eraldi piiratud õigustega andmebaasiühendusi.
  • 4. Ärge salvestage konfidentsiaalset teavet otse, krüptige ega räsige paroole ja tundlikku teavet.
  • 5. Rakenduse erandite teave peaks andma võimalikult vähe vihjeid ja algse veateabe pakkimiseks on kõige parem kasutada kohandatud veateavet
  • 6. SQL-i süstimise tuvastamise meetod kasutab üldiselt abimeetoditTarkvaraVõi veebisaidi platvormi tuvastamiseks kasutab tarkvara üldiselt SQL-i süstimise tuvastamise tööriista jsky ja veebisaidi platvormil on Yisi veebisaidi turvaplatvormi tuvastamise tööriist. MDCSOFT SCAN et al.MDCSOFT-IPS-i kasutamine võib tõhusalt kaitsta SQL-i süstimise, XSS-i rünnakute jms eest.

SQL-i süstimise vältimine

Skriptikeeltes, nagu Perl ja PHP, saate SQL-i süstimise vältimiseks kasutaja sisestatud andmetest põgeneda.

PHP MySQL-i laiendus pakub funktsiooni mysqli_real_escape_string() spetsiaalsete sisendmärkide vältimiseks.

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

Süstimine sarnastes avaldustes

Kui kasutaja sisestab päringu nagu väärtused "_" ja "%", juhtub see nii: algselt tahtis kasutaja teha päringu "abcd_", kuid päringu tulemused sisaldavad "abcd_", "abcde" ja "abcdf" " Jne; probleem ilmneb ka siis, kui kasutaja soovib teha päringu "30%" (märkus: kolmkümmend protsenti).

PHP-skriptis saame ülaltoodud olukorra lahendamiseks kasutada funktsiooni addcslashes(), nagu järgmises näites:

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

Funktsioon addcslashes() lisab määratud märgi ette kaldkriipsu.

Süntaksivorming:

addcslashes(string,characters)
参数kirjeldus
nöörNõutud.Määrab kontrollitava stringi.
märkiValikuline.Määrab tähemärgi või tähemärkide vahemiku, mida addcslashes() mõjutab.

Hope Chen Weiliangi ajaveeb ( https://www.chenweiliang.com/ ) jagatud "Kuidas MySQL takistab SQL-i süstimist? sql-i süstimise põhimõte ja ennetamine", see aitab teid.

Tere tulemast selle artikli linki jagama:https://www.chenweiliang.com/cwl-500.html

Tere tulemast Chen Weiliangi ajaveebi Telegrami kanalile, et saada uusimaid värskendusi!

🔔 Olge esimene, kes saab kanali ülemises kataloogis väärtusliku "ChatGPT sisuturunduse AI tööriista kasutamise juhendi"! 🌟
📚 See juhend sisaldab tohutut väärtust, 🌟See on harukordne võimalus, ärge jätke seda kasutamata! ⏰⌛💨
Jaga ja like kui meeldib!
Teie jagamine ja meeldimised on meie pidev motivatsioon!

 

发表 评论

Teie e-posti aadressi ei avaldata. Kasutatakse kohustuslikke välju * Silt

kerige üles