Obsah:
Definícia - Čo znamená SQL Injection?
Injekcia SQL je počítačový útok, pri ktorom je škodlivý kód zabudovaný do zle navrhnutej aplikácie a potom odovzdaný do backendovej databázy. Škodlivé údaje potom produkujú výsledky dotazu na databázu alebo akcie, ktoré sa nikdy nemali vykonať.
Techopedia vysvetľuje SQL Injection
Pozrime sa na príklad útoku SQL injekcie:
Aplikácia, ktorá riadi operácie banky, obsahuje ponuky, ktoré sa môžu použiť na vyhľadávanie detailov o zákazníkovi pomocou dátových bodov, ako je napríklad číslo sociálneho poistenia zákazníka. Na pozadí aplikácia zavolá dotaz SQL, ktorý sa spustí v databáze odovzdaním zadaných vyhľadávacích hodnôt nasledovne:
VYBERTE klientske meno, telefón, adresu, dátum_prijatia WHERE social_sec_no = 23425
V tomto vzorovom skripte užívateľ zadá hodnotu 23425 do okna ponuky aplikácie a požiada ho, aby zadal číslo sociálneho zabezpečenia. Potom pomocou hodnoty poskytnutej používateľom sa v databáze spustí dotaz SQL.
Používateľ so znalosťou jazyka SQL môže rozumieť aplikácii a namiesto zadania jedinej hodnoty, keď sa žiada o číslo sociálneho zabezpečenia, zadajte reťazec „23425 alebo 1 = 1“, ktorý sa do databázy postúpi nasledovne:
VYBERTE meno klienta, telefón, adresu, dátum_prijatia WHERE social_sec_no = 23425 alebo 1 = 1
Klauzula WHERE je dôležitá, pretože zavádza zraniteľnosť. V databáze je podmienka 1 = 1 vždy pravdivá a pretože bol zadaný dotaz na vrátenie podrobností o čísle sociálneho zabezpečenia klienta (23425) alebo KDE 1 = 1, dotaz vráti všetky riadky v tabuľke, čo nebolo pôvodný zámer.
Vyššie uvedený príklad útoku SQL injekcie je jednoduchý, ale ukazuje, ako zneužitie zraniteľnosti môže prinútiť aplikáciu spustiť dotaz alebo príkaz backendovej databázy.
Útoky s injekciou SQL sa dajú zmierniť zabezpečením správneho návrhu aplikácií, najmä v moduloch, ktoré na spustenie databázových dopytov alebo príkazov vyžadujú vstup používateľa. Vo vyššie uvedenom príklade je možné aplikáciu zmeniť tak, aby akceptovala iba jednu číselnú hodnotu.