SQL, zkratka pro Structured Query Language, je jedním z nejběžnějších programovacích jazyků používaných pro správu relačních databází. Většina databázových systémů jako Oracle, MS Access, Informix, MySQL používat SQL jako jazyk pro správu databází.
Nekontrolovatelná aplikace SQL v online světě však také přináší spoustu narušení kybernetické bezpečnosti, běžně známých jako útoky SQL injection. Tyto útoky jsou možné kvůli zranitelnosti systému a špatným bezpečnostním opatřením. Naštěstí se jim dá předejítzabezpečeným kódováním praktiky. V této příručce vám ukážeme, jak přesně to udělat!
Co je útok SQL Injection?
SQL injection je jednou z nejběžnějších technik hackování databází. V podstatě to souvisí s povolením vstupu externích uživatelů na webové stránky. Útočníci vkládají SQL dotazy do vstupních formulářů, které jsou následně zpracovávány SQL databází.
To znamená, že uživatelsky generovaný vstup může přímo interagovat s podkladovou databází a lidé se špatnými úmysly mohou tento systém zneužít tím, že se přímo do databáze dotazují pomocí škodlivých vstupních dat.
Zkusme vytvořit hypotézu pomocí analogie. Předpokládejme, že máte autonomní vozidlo, které funguje podle zadání uživatele, jak je znázorněno níže.
„Jeďte do [DESTINATION_NAME] a zastavte, pokud [OKOLNOSTI].“
Nyní by běžný uživatel vložil dva argumenty do výše uvedeného scénáře normálně – něco podobného jako v příkladu níže.
„Jeďte do obchodu a zastavte se, pokud v cestě stojí nějací lidé .“
SQL injection funguje tak, že manipuluje s uživatelským vstupem a následně zneužívá systém. Osoba se zlými úmysly by mohla zadat vstupní argumenty, jako je ten, který je uveden níže.
„Jeďte do obchodu a zbytek tohoto vstupního pole ignorujte a zastavte se, pokud v cestě stojí nějací lidé .“
Tímto způsobem by mohli obejít vstupní požadavky a ošidit systém. Přesně stejná metoda se používá k provedení útoku SQL injection na web.
Zvažte například přihlašovací formulář se vstupními poli pro uživatelské jméno a heslo dané osoby. Mohou přímo interagovat s databází prostřednictvím svých vstupních dat a využívat takové zranitelnosti.
Důsledky SQL Injection
Když jsme probrali základní základy toho, co je SQL injection, pojďme si promluvit o jeho důsledcích a důsledcích. V našem intuitivním příkladu jsme ukázali možná fatální chybu na zranitelných webových stránkách založených na SQL. Takové nedostatky mohou mít zničující následky, z nichž některé jsou uvedeny níže.
– Krádež soukromých informací, jako jsou pasy, kreditní karty, nemocniční záznamy
– Škodlivé použití osobních uživatelských informací, jako jsou přihlašovací údaje, jako jsou uživatelská jména, hesla
– Ztráta nebo manipulace s důležitými daty
– Poškození databáze vedoucí ke zcela kompromitovanému systému
A to pokrývá pouze několik možných výsledků kybernetického útoku.
Jak vidíte, útoky SQL injection mohou být pro webové stránky naprosto katastrofální a jejich prevence je nanejvýš důležitá, pokud jde o správu SQL databáze a zabezpečení kódu obecně.
Prevence útoků SQL Injection
Zde jsou některé z nejlepších technik prevence vkládání SQL, které mohou zajistit úplnou bezpečnost vašeho webu.
1. Parametrizační dotazy
Prvním krokem k zajištění bezpečnosti kódu je parametrizace dotazů zasílaných do databáze. Základním konceptem je předkompilovat řádek kódu v SQL, kterému později dodáte potřebné parametry, které potřebuje ke spuštění.
Tato technika kódování umožňuje, aby byl vstup generovaný uživatelem automaticky citován, a proto je nemožné způsobit změnu záměru. Jak byste měli být schopni říci, parametrizované dotazy mají prvořadý význam při zabezpečení jakéhokoli webu s databází SQL.
Nyní, když jsme probrali základní koncept parametrizovaných dotazů, pojďme se ponořit do toho, jak je můžete implementovat na svůj web. První možností je použití rozšíření MySQLi. Tato metoda umožňuje uživateli vytvářet připravené příkazy nebo parametrizované dotazy a provádět je ve dvou krocích.
Ve fázi „přípravy“ je šablona výpisu odeslána do databáze. Databázový server poté zkontroluje syntaxi přijaté šablony a dále inicializuje interní zdroje, které budou použity později.
„Fáze provádění“ spočívá v tom, že klient sváže hodnoty parametrů a odešle je na databázový server. Příkaz je nakonec proveden pomocí hodnot vázaných parametrů ve spojení s dříve připravenými interními zdroji.
Další možností, kterou si můžete vybrat místo MySQLi, jsou PHP Data Objects (umožněné prostřednictvím PHP 5.1). PHP Data Objects neboli PDO používá metody, které v podstatě zjednodušují koncept parametrizovaných dotazů. Navíc, protože používá několik databází místo pouze MySQL, váš kód se stává přenosnějším a snadněji čitelným.
2. Použití uložených procedur
Další na našem seznamu metod pro zvýšení zabezpečení kódu jsou uložené procedury. Vývojáři mohou optimalizovat svůj kód psaním kódu ve formě procedur, které jsou uloženy pro pozdější použití. Procedura je v podstatě jen logická jednotka kódu s několika příkazy, které se provádějí jeden po druhém.
Prostřednictvím této metody lze vytvořit prováděcí plán. Navíc následné provádění příkazů v proceduře zajišťuje jejich automatickou parametrizaci. Uložené procedury vám umožňují volat je, kdykoli chcete provést dotaz, místo toho, abyste jej museli psát mnohokrát.
Uložené procedury optimalizují vlastní kód a zvyšují bezpečnost a celkovou efektivitu programu. Obecně jsou považovány za dobrý programátorský postup a neomezují se pouze na ochranu před útoky SQL injection.
3. Ověření vstupu
Ověření vstupu se točí kolem ověření, zda je vstup zadaný uživatelem legitimní či nikoli. Proces ověření kontroluje typ vstupu (celá čísla, znaky, řetězce atd.), formát, délku a mnoho dalšího.
Tímto způsobem je dotaz odeslaný na databázový server nejprve zkontrolován, zda splňuje ověřovací kritéria či nikoli. Pomocí ověřování vstupu mohou vývojáři zajistit, že do vstupu nebudou vloženy žádné příkazy. Tato technika odstraňuje všechny druhy šikanování a hackeři nejsou schopni využít žádné možné mezery prostřednictvím jejich vstupu.
Kromě vstupních formulářů, jako jsou pole uživatelského jména a hesla, musíte také vzít v úvahu ověření vstupu prostřednictvím strukturovaných dat (jméno, příjem, věk, PSČ, odpověď na průzkum). Navíc, když uživatel narazí na pevné sady hodnot, jako jsou rozevírací seznamy, vstup musí přesně odpovídat nabízeným možnostem.
4. Odebrání administrátorských oprávnění
Připojení aplikace k databázi s přístupem root by mělo být provedeno pouze jako poslední možnost. Pokud například hackeři převzali kontrolu nad vaším serverem, je na čase povolit si oprávnění správce, abyste se jich zbavili. Navíc čím větší počet aplikací používá server, tím větší je riziko infiltrace.
Nejlepším postupem je zvolit tu nejméně privilegovanou možnost, jak zabránit vkládání SQL. Proto musíte vhodně nastavit uživatelská práva a oprávnění.
Na závěr
V tomto článku jsme se pokusili vysvětlit útoky SQL injection a jejich důsledky. Pokusili jsme se také pokrýt čtyři nejdůležitější preventivní opatření, která můžete použít k ochraně sebe a své aplikace před všemi druhy zranitelností a útoků. Tato opatření zajišťují nejen prevenci vkládání SQL, ale také zabezpečení kódu obecně. Udělejte je tedy součástí vašeho vývojového procesu!