SQL Injection je typ kybernetického útoku, který zneužívá nedostatečné ošetření uživatelských vstupů předtím, než jsou použity v SQL dotazu. Místo toho, aby aplikace brala vstup jako prostý text (např. jméno uživatele), interpretuje jej jako součást příkazu pro databázi.
Představte si přihlašovací formulář. Aplikace na pozadí vytvoří dotaz typu:
SELECT * FROM uzivatele WHERE jmeno = '$uzivatel' AND heslo = '$heslo';
Uživatel zadá jméno admin a heslo mojeheslo123.
Výsledek: Databáze hledá shodu a pokud existuje, uživatele přihlásí.
Útočník do pole pro jméno zadá: admin' –
Znaky – v SQL znamenají komentář (vše za nimi je ignorováno).
Výsledný dotaz bude vypadat takto:
SELECT * FROM uzivatele WHERE jmeno = 'admin' – ' AND heslo = '…';
Databáze nyní vidí pouze příkaz „najdi uživatele admin“ a zbytek dotazu (včetně kontroly hesla) ignoruje. Útočník je přihlášen jako správce bez znalosti hesla.
DROP TABLE může útočník smazat celé tabulky.Dnešní technologie nabízejí spolehlivé způsoby obrany:
1. **Prepared Statements (Parametrizované dotazy):** Nejdůležitější obrana. Data jsou od příkazu oddělena. Databáze předem ví, co je příkaz, a uživatelský vstup bere vždy jen jako text, nikdy jako kód. 2. **Validace vstupu:** Povolení pouze očekávaných formátů (např. pole pro věk musí obsahovat jen čísla). 3. **Princip nejnižších privilegií:** Databázový účet, který používá webová stránka, by neměl mít právo mazat tabulky nebo přistupovat k systémovým tabulkám. 4. **WAF (Web Application Firewall):** Filtr, který dokáže rozpoznat a zablokovat známé vzory SQL útoků dříve, než dorazí k aplikaci.
Související pojmy: Command Injection, Databáze, PHP, Kybernetická bezpečnost, WAF, Šifrování.