SQL injection (sql injection)

Aktualizované Sep 22, 2026

SQL injection je zraniteľnosť, ktorá nastáva, keď sa nedôveryhodný vstup spojí s databázovým príkazom takým spôsobom, ktorý zmení jeho štruktúru alebo význam. Útočník potom môže čítať, meniť alebo mazať dáta, prípadne spúšťať databázové operácie, ktoré aplikácia nemala v úmysle povoliť.

K SQL injection dochádza vtedy, keď sa dáta poskytnuté z prostredia mimo dôveryhodnej hranice stanú súčasťou syntaxe SQL. Databáza potom interpretuje časť týchto dát ako príkaz, a nie ako hodnotu. Táto chyba môže ovplyvniť čítanie aj zápis a môže sa objaviť všade tam, kde aplikácia dynamicky zostavuje databázový dopyt (query).

Kde SQL injection vstupuje do vygenerovaného kódu

Formuláre a parametre verejných API sú známymi zdrojmi, no nie sú jedinými. Databázu môžu neskôr zasiahnuť aj administrátorské filtre, nástroje na tvorbu reportov, importované súbory, polia webhookov, uložené hodnoty a parametre úloh. Hodnota môže prejsť viacerými funkciami predtým, než sa dostane do dopytu, kde sa stane nebezpečnou.

Pri audite vibe-coded softvéru sa sleduje prístup k databáze naprieč celou útočnou plochou. Vygenerovaný kód môže v jednej funkcii využívať bezpečných databázových pomocníkov (query helpers) a v inej skladať čisté SQL dopyty. Podobný vzhľad obrazoviek nezaručuje podobné spracovanie na úrovni databázy.

Vzor dopytuOtázka audituBezpečnejšia hranica
Vyhľadanie záznamuJe identifikátor viazaný ako hodnota?Parametrizovaný dopyt
Vyhľadávanie a filtreMôže sa vstup stať operátorom alebo klauzulou?Zoznam povolených polí a operátorov
ZoradenieMôže byť stĺpec alebo smer zoradenia voľne zadaný?Pevné mapovanie na známe identifikátory
Hromadný importDostávajú sa uložené hodnoty do neskorších dopytov?Validácia plus viazanie parametrov
ReportySpája šablóna jednotlivé fragmenty dopytu?Preskúmaný query builder alebo fixný dopyt

Validácia nepredstavuje oddelenie dopytov

Validácia vstupov môže odmietnuť hodnoty, ktoré nespĺňajú pravidlá aplikácie. Nenahrádza však viazanie parametrov (parameter binding). Platné meno zákazníka môže stále obsahovať interpunkciu a číselná kontrola na jednej route nechráni inú trasu dopytu.

Kľúčový rozdiel je medzi štruktúrou SQL a samotnými dátami. Hodnoty by mali prechádzať cez parametrický mechanizmus databázového ovládača. Identifikátory, ako sú schválené stĺpce pre zoradenie, si zvyčajne vyžadujú explicitné mapovanie, pretože ich nie je vždy možné odovzdať ako bežné hodnoty. Manuálne ošetrovanie (escaping) vstupu sa ťažko overuje konzistentne a závisí od pravidiel databázy a kódovania.

Čo audit kontroluje

Audítori sledujú každú cestu, ktorá vytvára alebo spúšťa SQL príkazy:

  • Priame volania dopytov: Vyhľadajte interpoláciu reťazcov, zreťazenie a šablónové fragmenty.
  • Query builders: Overte, či dynamické operátory, identifikátory a klauzuly používajú obmedzené vstupy.
  • Nepriame toky: Sledujte dáta, ktoré sa najprv uložia a neskôr sa použijú v príkaze.
  • Oprávnenia: Skontrolujte, či identita databázy aplikácie nemôže vykonávať viac operácií, než daná funkcia vyžaduje.
  • Správanie pri zlyhaní: Zaistite, aby chyby databázy neodhaľovali text dopytu, detaily schémy alebo uložené hodnoty.

Dôkazy, že hranica drží

Revízia kódu určuje, ako sa príkazy zostavujú. Testy následne preveria presnú dátovú cestu s hodnotami, ktoré by v prípade zlyhania oddelenia zmenili príkaz. Očakávaným výsledkom je normálne spracovanie dát alebo riadené odmietnutie, bez neúmyselného čítania, zápisu alebo odhalenia chýb.

Jeden bezpečný dopyt nedokazuje bezpečnosť celej aplikácie. Audit zaznamenáva pomocnú triedu, konvenciu alebo vrstvu prístupu k dátam, ktorá udržiava túto hranicu konzistentnú, a následne identifikuje každú výnimku. Toto je súčasťou disciplíny preskúmania, ktorá sa vyžaduje, keď sa kód vygenerovaný pomocou AI presúva do produkcie.