====== SQL Injection (SQLi) ====== **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. ---- ====== Jak útok probíhá? ====== Představte si přihlašovací formulář. Aplikace na pozadí vytvoří dotaz typu: ''SELECT * FROM uzivatele WHERE jmeno = '$uzivatel' AND heslo = '$heslo';'' ===== Legitimní pokus: ===== Uživatel zadá jméno ''admin'' a heslo ''mojeheslo123''. Výsledek: Databáze hledá shodu a pokud existuje, uživatele přihlásí. ===== Útok (Obejití hesla): ===== Ú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. ---- ====== Hlavní typy SQL Injection ====== * **In-band (Classic):** Útočník vidí výsledky útoku přímo na webové stránce (např. vypsaná data z jiné tabulky). * **Inferential (Blind SQLi):** Stránka nezobrazuje data, ale útočník sleduje odpovědi (např. zda se stránka načetla, nebo skončila chybou). * **Boolean-based:** Útočník klade otázky typu PRAVDA/NEPRAVDA. * **Time-based:** Útočník donutí databázi čekat 10 sekund, pokud je první písmeno hesla 'A'. Pokud stránka tuhne, ví, že trefil správné písmeno. * **Out-of-band:** Útočník donutí databázi odeslat data na svůj externí server (např. pomocí DNS požadavku). ---- ====== Důsledky útoku ====== * **Únik dat:** Masové stahování osobních údajů (e-maily, adresy, hashovaná hesla). * **Ztráta integrity:** Útočník může změnit ceny v e-shopu, smazat dluhy nebo vytvořit falešné faktury. * **Úplná ztráta dat:** Pomocí příkazu ''DROP TABLE'' může útočník smazat celé tabulky. * **Přístup k OS:** V některých konfiguracích může SQLi vést až k [[command_injection|Command Injection]] na úrovni operačního systému. ---- ====== Jak se bránit? ====== 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í.//