Jedna z najväčších tried webových zraniteľností je známa ako „SQL Injection“ alebo SQLi. Structured Query Language, alias SQL, je jazyk používaný na interakciu s väčšinou databáz, aj keď sa v závislosti od databázy používa množstvo variantov jazyka plošina. Akákoľvek webová lokalita, ktorá uchováva používateľské údaje, ako sú informácie o účte, alebo poskytuje funkciu nahrávania používateľov, ako je webová lokalita na hosťovanie obrázkov, bude na ukladanie týchto údajov používať databázu.
Tip: SQL sa vo všeobecnosti vyslovuje buď „ess cue ell“ alebo „pokračovanie“, pričom prvá možnosť je bežnejšia v britskej angličtine a druhá v americkej angličtine. Obe výslovnosti sú všeobecne chápané v kontexte rozprávania o databázach.
Čo je SQLi?
SQLi je zraniteľnosť, pri ktorej weboví vývojári navrhujú kód, ktorý komunikuje medzi webový server a databáza neimplementujú ochranu proti príkazom SQL odoslaným a užívateľ. Problém je v tom, že je možné uniknúť z databázových príkazov a pridať nové argumenty alebo úplne nové vyhlásenie. Zmenený alebo druhý príkaz databázy môže vykonávať celý rad akcií vrátane potenciálne rozsiahlych vymazaní alebo únikov údajov.
Využitie sa zvyčajne točí okolo toho, aby existujúce vyhlásenia boli pravdivé za každých okolností, alebo poskytovania druhého dávkového príkazu, ktorý vykonáva špecifickú akciu, ako je vymazanie alebo zobrazenie všetkých údajov. Napríklad príkaz SQL na prihlásenie na webovú stránku môže skontrolovať, či sa zadané používateľské meno a heslo zhodujú so záznamom v databáze. Ak sa chcete pokúsiť získať prístup, zneužitie vstrekovania SQL sa môže pokúsiť pridať klauzulu „alebo pravda“, ako napríklad „alebo 1=1“. To by znamenalo príkaz v zmysle „prihlás sa pomocou [týmto] používateľským menom, ak je heslo [toto] alebo je toto vyhlásenie pravdivé“.
Ako zabrániť SQLi
SQLi bývalo veľmi bežným spôsobom, akým webové stránky narušili databázu a následne unikli online. Vďaka sústredenému úsiliu zabezpečiť, aby povedomie o bezpečnosti bolo súčasťou školenia vývojárov, bola táto trieda zraniteľnosti do značnej miery vyriešená a už sa vyskytuje len zriedka.
Správnou metódou, ako zabrániť SQLi, je použiť pripravené príkazy, známe aj ako parametrizované dotazy. Tradične sú príkazy SQL deklarované a užívateľský vstup je do nich zreťazený počas tejto deklarácie. S pripravenými príkazmi sa vypíše príkaz databázy a potom príkaz spustí samostatná funkcia a vloží údaje používateľa. Aj keď sa to môže zdať ako malý rozdiel, úplne mení spôsob spracovania príkazu. Rozdiel bráni spusteniu akýchkoľvek zmysluplných príkazov SQL a zaobchádza so všetkými používateľskými vstupmi ako s reťazcom, čím bráni vykonaniu injekcie SQL.