Jak MySQL zabraňuje vkládání SQL? Princip a prevence SQL injection

MySQLJak zabránit vkládání SQL? Princip a prevence SQL injection

MySQL a SQL injection

Pokud data zadaná uživatelem vezmete přes webovou stránku a vložíte je do aMySQL databáze, pak mohou nastat problémy se zabezpečením vkládání SQL.

Tato kapitola vás seznámí s tím, jak zabránit vkládání SQL a jak používat skripty k filtrování vložených znaků v SQL.

Takzvaná SQL injekce má oklamat server, aby provedl škodlivé příkazy SQL vložením příkazů SQL do webového formuláře pro odeslání nebo zadání řetězce dotazu názvu domény nebo požadavku na stránku.

Nikdy bychom neměli důvěřovat uživatelskému vstupu, musíme předpokládat, že uživatelská vstupní data nejsou bezpečná a všichni musíme uživatelská vstupní data filtrovat.

V následujícím příkladu musí být zadané uživatelské jméno kombinací písmen, číslic a podtržítek a uživatelské jméno musí být dlouhé 8 až 20 znaků:

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

Podívejme se na situaci SQL, která nastane, když nejsou filtrovány žádné speciální znaky:

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

Ve výše uvedeném příkazu injection jsme nefiltrovali proměnnou $name.Do $name se vloží SQL příkaz, který nepotřebujeme, čímž se smažou všechna data v tabulce users.

mysqli_query() v PHP nemá povoleno provádět více SQL příkazů, ale SQLite a PostgreSQL mohou provádět více SQL příkazů současně, takže musíme přísně ověřovat data těchto uživatelů.

Abychom zabránili vkládání SQL, musíme věnovat pozornost následujícím bodům:

  • 1. Nikdy nedůvěřujte uživatelskému vstupu.Zkontrolujte vstup uživatele, můžete použít regulární výrazy nebo omezit délku, převést jednoduché uvozovky a dvojité „-“ atd.
  • 2. Nikdy nepoužívejte dynamické sestavení sql, můžete použít parametrizované sql nebo přímo použít uložené procedury pro dotaz na data a přístup.
  • 3. Nikdy nepoužívejte databázová připojení s administrátorskými právy, pro každou aplikaci používejte samostatná databázová připojení s omezenými oprávněními.
  • 4. Neukládejte důvěrné informace přímo, nešifrujte nebo hashujte hesla a citlivé informace.
  • 5. Informace o výjimce aplikace by měly poskytovat co nejméně rad a nejlepší je použít vlastní informace o chybě k zabalení původních informací o chybě.
  • 6. Metoda detekce sql injekce obecně přijímá pomocnou软件Nebo platforma webových stránek k detekci, software obecně používá nástroj pro detekci injekce SQL jsky a platforma webových stránek má nástroj pro detekci platformy zabezpečení webových stránek Yisi. MDCSOFT SCAN a kol.Pomocí MDCSOFT-IPS se můžete účinně bránit proti SQL injection, XSS útokům atd.

Zabránit vkládání SQL

Ve skriptovacích jazycích, jako je Perl a PHP, můžete uniknout datům zadaným uživatelem, abyste zabránili vkládání SQL.

Rozšíření MySQL pro PHP poskytuje funkci mysqli_real_escape_string() pro únik speciálních vstupních znaků.

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

Injekce v podobných prohlášeních

Při dotazu typu, pokud uživatel zadá hodnoty s "_" a "%", stane se to: uživatel chtěl původně dotazovat "abcd_", ale výsledky dotazu zahrnují "abcd_", "abcde" a "abcdf " Atd.; problém také nastává, když se uživatel chce zeptat "30 %" (pozn.: třicet procent).

Ve skriptu PHP můžeme použít funkci addcslashes() k řešení výše uvedené situace, jako v následujícím příkladu:

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

Funkce addcslashes() přidá zpětné lomítko před zadaný znak.

Formát syntaxe:

addcslashes(string,characters)
参数popis
šňůraPožadované.Určuje řetězec, který se má zkontrolovat.
znakůVolitelný.Určuje znak nebo rozsah znaků ovlivněných funkcí addcslashes().

Blog Hope Chen Weiliang ( https://www.chenweiliang.com/ ) shared „Jak MySQL zabraňuje vkládání SQL? princip a prevence sql injection“, pomůže vám.

Vítejte u sdílení odkazu na tento článek:https://www.chenweiliang.com/cwl-500.html

Vítejte na telegramovém kanálu blogu Chen Weiliang, kde získáte nejnovější aktualizace!

🔔 Buďte první, kdo získá cenný „Průvodce používáním nástroje AI pro obsahový marketing ChatGPT“ v hlavním adresáři kanálu! 🌟
📚 Tento průvodce má obrovskou hodnotu, 🌟Toto je vzácná příležitost, nenechte si ji ujít! ⏰⌛💨
Sdílejte a lajkujte, pokud se vám líbí!
Vaše sdílení a lajky jsou naší neustálou motivací!

 

发表 评论

Vaše e-mailová adresa nebude zveřejněna. 必填 项 已 用 * 标注

滚动 到 顶部