Úvod do SQL Injection
- SQL injection je chyba zabezpečení nebo technika, která může zničit databázi webu nebo webové aplikace. Jde o jeden z nejpoužívanějších webových útoků.
- Hlavním cílem injekce SQL je získat přístup k databázi webových stránek. Aby tedy SQL injection fungovalo, potřebuje webovou aplikaci, která je připojena k databázi.
- Vzhledem k tomu, že databáze obsahuje všechna data včetně hesla správce, tj. přihlašovacího hesla vlastníka, může útočník webu vstoupit na stránku správce a upravit web vyplněním webového formuláře.
- Webový formulář obsahuje uživatelské jméno a hesla. Když uživatel něco zadá do vstupního pole webového formuláře, SQL SELECT dotaz je implementován v databázi.
- Systém se snaží porovnat vstupy, tj. uživatelské jméno a heslo zadané uživatelem, s uživatelským jménem a heslem, které je již uloženo v databázi. Pokud jsou oba vstupy shodné, pak uživatel získá přístup, jinak bude uživateli odepřen.
- Existují určité webové stránky, které nemají mechanismus k blokování jakéhokoli jiného vstupu. Takové webové stránky jsou zranitelné vůči SQL injection. V tomto případě lze jako vstup zadat jakýkoli SQL dotaz a systém jej provede.
- Útočník může například zadat dotaz ke stažení celé databáze, smazání databáze, úpravě databáze a nastavení podmínky vždy jako pravdivé. Pokud je podmínka hesla vždy pravdivá, nezáleží na tom, zda je zadáno nějaké heslo. Pro heslo systém přistupuje k těm, která jsou uložena v databázi, ale pokud je proveden dotaz na odstranění tabulky hesel v databázi, systém začne přijímat jakékoli heslo. Tímto způsobem může útočník snadno získat přístup k databázi. Nyní může znát všechna hesla lidí přihlášených na web, různé tabulky a jejich obsah, vnitřní strukturu webu a jakékoli další informace související s webem.
- Tato metoda se nazývá SQL injection, při které vložíte dotaz do databáze, abyste s ní manipulovali a získali k ní neoprávněný přístup. Toto je nejnebezpečnější typ útoku na webové stránky pro databázi založenou na SQL.
- Jedním ze způsobů, jak takovým útokům předejít, je blokovat nepotřebné vstupy kromě uživatelských jmen a hesel.
- Příkazy SQL injection se provádějí za běhu. Vyhněte se tedy příkazům dynamického zadávání. Zabraňte databázi pomocí brány firewall webových aplikací . Také nikomu nesdělujte žádné důvěrné informace týkající se webu.
- Webové stránky mohou v důsledku takových útoků SQL utrpět obrovské datové a finanční ztráty.
Příklad:
Předpokládejme, je k ní připojena webová aplikace s databází. Tato webová aplikace může přijímat vstup od uživatele a ukládat informace do databáze nebo načítat data z databáze a zobrazovat je uživateli.
V obou případech se na webové aplikaci vygeneruje SQL dotaz nebo databázový dotaz, který se odešle do databáze a tento dotaz se provede na databázi a příslušné informace se vrátí zpět webové aplikaci. Takto funguje normální scénář.
Když tedy útočník použije SQL injection, pokusí se zmanipulovat tento databázový dotaz tak, aby udělal něco, co by v ideálním případě dělat neměl. Útočník tedy změní SQL dotaz, zmanipuluje jej, vloží do SQL dotazu nějaký škodlivý řetězec a následně jej přiměje provést něco neoprávněným způsobem. Nyní tedy databázový dotaz zmanipuluje útočník, poté se tento škodlivý dotaz odešle do databáze, tam se provede a vrátí se příslušné výsledky.
Toto je známé jako SQL injection. SQL injection je technika vkládání kódu používaná k provádění škodlivých a dynamických příkazů SQL. Útoky SQL jsou něco, co útočník používá k převzetí kontroly nad databázovými servery.
Jak zabránit vkládání SQL
- Nepoužívejte dynamické SQL
Vstupy poskytnuté uživatelem by neměly být umístěny přímo do SQL dotazu, který bude provozován v databázi. Namísto použití dynamického SQL by se měly používat uložené procedury, připravené příkazy a parametrizované dotazy, protože jsou bezpečnější ve srovnání s dynamickými dotazy SQL.
- Vstupy poskytnuté uživatelem musí být dezinfikovány
Typ dat, která bude poskytnuta uživatelem, musí být řádně spárován a ověřen s očekávaným typem.
- Citlivá data by neměla být v prostém textu
Před uložením důvěrných dat, jako jsou hesla, do databáze, by měla být řádně zašifrována pomocí hash. Salting musí být aplikován na zašifrované hashe, aby byla důvěrným datům poskytnuta další vrstva zabezpečení.
- Chyby databáze by se neměly zobrazovat přímo uživateli
Informace o chybě zobrazené útočníkovi mohou pomoci získat informace o databázi.