Ako MySQL zabraňuje vstrekovaniu SQL? Princíp a prevencia SQL vstrekovania

MySQLAko zabrániť injekcii SQL? Princíp a prevencia SQL vstrekovania

MySQL a SQL injekcia

Ak vezmete údaje zadané používateľom cez webovú stránku a vložíte ich do aDatabáza MySQL, potom môžu nastať problémy so zabezpečením vstrekovania SQL.

Táto kapitola predstaví, ako zabrániť vstrekovaniu SQL a filtrovať vložené znaky v SQL prostredníctvom skriptov.

Takzvaná injekcia SQL má oklamať server, aby vykonal škodlivé príkazy SQL vložením príkazov SQL do webového formulára na odoslanie alebo zadanie reťazca dopytu názvu domény alebo požiadavky na stránku.

Nikdy by sme nemali dôverovať užívateľským vstupom, musíme predpokladať, že užívateľské vstupné dáta nie sú bezpečné a všetci potrebujeme filtrovať užívateľské vstupné dáta.

V nasledujúcom príklade musí byť zadané používateľské meno kombináciou písmen, číslic a podčiarkovníkov a používateľské meno musí mať 8 až 20 znakov:

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

Pozrime sa na situáciu SQL, ktorá nastane, keď nie sú filtrované žiadne špeciálne znaky:

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

Vo vyššie uvedenom injekčnom príkaze sme nefiltrovali premennú $name. Do $name sa vloží príkaz SQL, ktorý nepotrebujeme, čím sa vymažú všetky údaje v tabuľke users.

mysqli_query() v PHP nemá povolené vykonávať viacero SQL príkazov, ale v SQLite a PostgreSQL je možné vykonať viacero SQL príkazov súčasne, takže musíme prísne overovať údaje týchto používateľov.

Aby sme zabránili vstrekovaniu SQL, musíme venovať pozornosť nasledujúcim bodom:

  • 1. Nikdy neverte užívateľským vstupom.Skontrolujte vstup používateľa, môžete použiť regulárne výrazy alebo obmedziť dĺžku, previesť jednoduché úvodzovky a dvojité „-“ atď.
  • 2. Nikdy nepoužívajte dynamické zostavenie sql, môžete použiť parametrizované sql alebo priamo použiť uložené procedúry na dotazovanie a prístup k údajom.
  • 3. Nikdy nepoužívajte databázové pripojenia s oprávneniami správcu, použite samostatné databázové pripojenia s obmedzenými oprávneniami pre každú aplikáciu.
  • 4. Neuchovávajte dôverné informácie priamo, nešifrujte alebo hashujte heslá a citlivé informácie.
  • 5. Informácie o výnimkách aplikácie by mali poskytovať čo najmenej tipov a najlepšie je použiť vlastné informácie o chybe na zabalenie pôvodných informácií o chybe
  • 6. Metóda detekcie sql injekcie vo všeobecnosti prijíma pomocnú软件Alebo platforma webových stránok na detekciu, softvér vo všeobecnosti používa nástroj na detekciu vstrekovania sql jsky a platforma webových stránok má nástroj na detekciu bezpečnostnej platformy webových stránok Yisi. MDCSOFT SCAN a kol.Pomocou MDCSOFT-IPS sa môžete účinne brániť proti SQL injection, XSS útokom atď.

Zabrániť SQL Injection

V skriptovacích jazykoch, ako sú Perl a PHP, môžete uniknúť údajom zadaným používateľom, aby ste zabránili vstrekovaniu SQL.

Rozšírenie MySQL pre PHP poskytuje funkciu mysqli_real_escape_string() na únik špeciálnych vstupných 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}'");

Injekcia v podobných vyhláseniach

Pri dotaze typu, ak má hodnota zadaná používateľom "_" a "%", stane sa to: používateľ pôvodne chcel dotaz "abcd_", ale v poli sú "abcd_", "abcde" a "abcdf" výsledok dotazu atď., problém nastáva aj vtedy, keď chce používateľ zadať dotaz „30 %“ (poznámka: tridsať percent).

V PHP skripte môžeme použiť funkciu addcslashes() na zvládnutie vyššie uvedenej situácie, ako v nasledujúcom príklade:

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

Funkcia addcslashes() pridá pred zadaný znak spätnú lomku.

Formát syntaxe:

addcslashes(string,characters)
参数popis
reťazecPožadovaný.Určuje reťazec, ktorý sa má skontrolovať.
znakovVoliteľné.Určuje znak alebo rozsah znakov ovplyvnených funkciou addcslashes().

Blog Hope Chen Weiliang ( https://www.chenweiliang.com/ ) shared „Ako MySQL zabraňuje vstrekovaniu SQL? princíp a prevencia injekcie sql“, pomôže vám.

Vitajte pri zdieľaní odkazu na tento článok:https://www.chenweiliang.com/cwl-500.html

Vitajte na telegramovom kanáli blogu Chen Weiliang, kde získate najnovšie aktualizácie!

🔔 Buďte prvý, kto získa cennú „Sprievodcu používaním nástroja AI pre obsahový marketing ChatGPT“ v hlavnom adresári kanála! 🌟
📚 Táto príručka obsahuje obrovskú hodnotu, 🌟Toto je vzácna príležitosť, nenechajte si ju ujsť! ⏰⌛💨
Ak sa vám páči, zdieľajte a lajkujte!
Vaše zdieľanie a lajky sú našou neustálou motiváciou!

 

发表 评论

Vaša emailová adresa nebude zverejnená. 必填 项 已 用 * Štítok

prejdite na začiatok