Kā MySQL novērš SQL injekciju? SQL injekcijas princips un profilakse

MySQLKā novērst sql injekciju? SQL injekcijas princips un profilakse

MySQL un SQL injekcija

Ja paņemat lietotāja ievadītos datus caur tīmekļa lapu un ievietojat tos aMySQL datu bāze, tad var rasties SQL injekcijas drošības problēmas.

Šī nodaļa iepazīstinās jūs ar to, kā novērst SQL ievadīšanu un izmantot skriptus, lai filtrētu ievadītās rakstzīmes SQL.

Tā sauktā SQL injekcija ir maldināt serveri, lai tas izpildītu ļaunprātīgas SQL komandas, ievietojot SQL komandas tīmekļa veidlapā, lai iesniegtu vai ievadītu domēna nosaukuma vai lapas pieprasījuma vaicājuma virkni.

Mums nekad nevajadzētu uzticēties lietotāja ievadītajai informācijai, mums ir jāpieņem, ka lietotāja ievadītie dati nav droši, un mums visiem ir jāfiltrē lietotāja ievadītie dati.

Šajā piemērā ievadītajam lietotājvārdam ir jābūt burtu, ciparu un pasvītru kombinācijai, un lietotājvārdam ir jābūt no 8 līdz 20 rakstzīmēm garam.

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

Apskatīsim SQL situāciju, kas rodas, ja netiek filtrētas speciālās rakstzīmes:

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

Iepriekš minētajā injekcijas priekšrakstā mēs nefiltrējām mainīgo $name. SQL priekšraksts, kas mums nav nepieciešams, tiek ievietots $name, kas izdzēsīs visus datus lietotāju tabulā.

Mysqli_query() PHP nav atļauts izpildīt vairākus SQL priekšrakstus, bet SQLite un PostgreSQL var izpildīt vairākus SQL priekšrakstus vienlaikus, tāpēc mums ir stingri jāpārbauda šo lietotāju dati.

Lai novērstu SQL ievadīšanu, mums jāpievērš uzmanība šādiem punktiem:

  • 1. Nekad neuzticieties lietotāja ievadītajai informācijai.Pārbaudiet lietotāja ievadīto informāciju, varat izmantot regulāras izteiksmes vai ierobežot garumu; konvertēt vienas pēdiņas un dubultās "-" utt.
  • 2. Nekad neizmantojiet dinamisko montāžas sql, varat izmantot parametrizētu sql vai tieši izmantot saglabātās procedūras datu vaicājumam un piekļuvei.
  • 3. Nekad neizmantojiet datu bāzes savienojumus ar administratora privilēģijām, izmantojiet atsevišķus datu bāzes savienojumus ar ierobežotām privilēģijām katrai lietojumprogrammai.
  • 4. Neglabājiet konfidenciālu informāciju tieši, nešifrējiet vai neizjaukt paroles un sensitīvu informāciju.
  • 5. Lietojumprogrammas izņēmuma informācijai ir jāsniedz pēc iespējas mazāk mājienu, un vislabāk ir izmantot pielāgotu kļūdu informāciju, lai iekļautu sākotnējo kļūdas informāciju.
  • 6. SQL injekcijas noteikšanas metode parasti tiek izmantota palīgierīcē软件Vai tīmekļa vietnes platforma, lai noteiktu, programmatūra parasti izmanto SQL injekcijas noteikšanas rīku jsky, tīmekļa vietnes platformai ir Yisi vietnes drošības platformas noteikšanas rīks. MDCSOFT SCAN et al.Izmantojot MDCSOFT-IPS, var efektīvi aizsargāties pret SQL injekciju, XSS uzbrukumiem utt.

Novērst SQL injekciju

Skriptu valodās, piemēram, Perl un PHP, jūs varat izvairīties no lietotāja ievadītajiem datiem, lai novērstu SQL injekciju.

PHP MySQL paplašinājums nodrošina funkciju mysqli_real_escape_string(), lai izvairītos no īpašām ievades rakstzīmēm.

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

Injekcijas līdzīgos paziņojumos

Veicot vaicājumu, ja lietotājs ievada vērtības ar "_" un "%", tas notiks: lietotājs sākotnēji vēlējās vaicāt "abcd_", bet vaicājuma rezultātos ir iekļauti "abcd_", "abcde" un "abcdf". " Utt; problēma rodas arī tad, ja lietotājs vēlas vaicāt "30%" (piezīme: trīsdesmit procenti).

PHP skriptā mēs varam izmantot funkciju addcslashes (), lai risinātu iepriekš minēto situāciju, kā parādīts šajā piemērā:

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

Funkcija addcslashes() pirms norādītās rakstzīmes pievieno atpakaļvērsto slīpsvītru.

Sintakses formāts:

addcslashes(string,characters)
参数apraksts
rindaObligāti.Norāda pārbaudāmo virkni.
rakstzīmesNeobligāti.Norāda rakstzīmi vai rakstzīmju diapazonu, ko ietekmē addcslashes().

Hope Chen Weiliang emuārs ( https://www.chenweiliang.com/ ) kopīgots "Kā MySQL novērš sql injekciju? sql injekcijas princips un profilakse”, tas jums palīdzēs.

Laipni lūdzam kopīgot šī raksta saiti:https://www.chenweiliang.com/cwl-500.html

Laipni lūdzam Chen Weiliang emuāra Telegram kanālā, lai saņemtu jaunākos atjauninājumus!

🔔 Esiet pirmais, kas kanāla augšējā direktorijā iegūst vērtīgo "ChatGPT satura mārketinga AI rīka lietošanas ceļvedi"! 🌟
📚 Šajā rokasgrāmatā ir milzīga vērtība, 🌟Šī ir reta iespēja, nepalaidiet to garām! ⏰⌛💨
Dalies un patīk, ja patīk!
Jūsu kopīgošana un atzīmes Patīk ir mūsu nepārtraukta motivācija!

 

发表 评论

Jūsu e-pasta adrese netiks publicēta. 必填 项 已 用 * Etiķete

ritiniet uz augšu