sql >> Databáze >  >> RDS >> Mysql

Nejlepší způsob, jak zabezpečit SQL dotaz v PHP

Dotaz, který jste zobrazili v otázce, nepoužívá hodnoty zadané uživatelem, takže neexistuje případ SQL Injection, ale v obecném případě:-

Nejprve musíte ověřit vše uživatelský vstup (uživatelská jména, e-maily atd.) před jeho použitím v dotazu. Například:- Pokud jste v uživatelském jménu povolili pouze alfanumerické znaky, musíte před pokračováním ve vytváření databázového dotazu zkontrolovat, zda je vstup skutečně alfanumerický či nikoli, a také musíte zkontrolovat velikost všech vstupů.

Poté jsou podle mého názoru připravené příkazy nejlepší volbou pro zabránění vkládání SQL.

Problém s mysql_real_escape_string():-

Protože mysql_real_escape_string() uniká znakům podle výchozí znakové sady, je lepší než funkce addlashes() a správně dezinfikuje Injekce SQL vznikající v důsledku zneužití vícebajtových znakových sad , ale v jiném článku zde , je ukázán scénář řešení, který vysvětluje, že injekci lze stále provádět.

Řešení:-

Správným a lepším způsobem, jak zabránit vkládání SQL, je použít připravené příkazy. Jde o techniku, ve které jsou příkazy SQL předkompilovány před vložením uživatelského vstupu (parametrů) a jsou považovány za opakovaně použitelné šablony SQL. Takže odděluje vstup uživatele od skutečného kódu SQL a analyzátor SQL nikdy neanalyzuje vstup uživatele.

Kromě zabezpečení optimalizuje také rychlost SQL dotazu. Pomáhá v případech, kdy potřebujete spustit stejný dotaz vícekrát s různými uživatelskými vstupy.

Podrobnosti o implementaci naleznete v příručce PHP.



  1. Vytvořte uloženou funkci MySQL s dynamickým počtem argumentů

  2. Errcode 13, problém SELECT DO OUTFILE

  3. Vrátit aktuální přihlašovací jméno na SQL Server (T-SQL)

  4. MySQL LOAD DATA INFILE číslo řádku úložiště