Vyskytuje sa, keď aplikácia buduje databázové príkazy kombinovaním textu príkazu s útočníkom ovplyvnenými hodnotami bez zachovania spoľahlivej hranice medzi kódom a údajmi. Úspešný útok môže čítať alebo meniť údaje, obísť kontroly aplikácie alebo vyvolať databázové schopnosti dostupné aplikačnému účtu.
Primárna obrana je držať štruktúru dotazu fixnú a odovzdávať hodnoty cez parametrizované rozhrania. Validácia vstupu môže vymáhať podnikové očakávania, ale nenahrádza parametrizáciu; databázové oprávnenia majú tiež limitovať dôsledky, ak iná kontrola zlyhá.
Kľúčové body
Bezpečná konštrukcia dotazovPoužiť prepared statements alebo správne parametrizované databázové rozhrania naprieč každou cestou prístupu k údajom, vrátane pozadových úloh, administratívnych funkcií, importovaných údajov a nepriamych vstupov.
Dynamické prvky dotazuParametre často nemôžu reprezentovať názvy tabuliek, názvy stĺpcov ani smery triedenia. Mapovať takéto voľby na fixný allowlist alebo prepracovať dotaz namiesto vkladania nedôveryhodného textu.
Redukcia dôsledkovDať aplikačným identitám len potrebné databázové privilégiá, oddeliť roly tam, kde je to praktické, chrániť pripojovacie poverenia, vyhnúť sa nepotrebným databázovým schopnostiam a monitorovať abnormálne správanie dotazov.
Dôležité obmedzenieEscapovanie, stored procedúry, objektovo-relačné mapovanie, validácia vstupu ani firewall webových aplikácií automaticky nezabraňujú SQL injection; bezpečnosť závisí od toho, ako je každý dotaz nakoniec skonštruovaný a vykonaný.