Nastává, když aplikace buduje databázové příkazy kombinováním textu příkazu s útočníkem ovlivněnými hodnotami bez zachování spolehlivé hranice mezi kódem a daty. Úspěšný útok může číst či měnit data, obejít kontroly aplikace nebo vyvolat databázové schopnosti dostupné účtu aplikace.
Primární obranou je držet strukturu dotazu pevnou a předávat hodnoty parametrizovanými rozhraními. Validace vstupu může vynucovat obchodní očekávání, ale nenahrazuje parametrizaci; databázová oprávnění by měla rovněž omezit důsledky, pokud jiná kontrola selže.
Klíčové body
Bezpečná konstrukce dotazůPoužívejte prepared statements či správně parametrizovaná databázová rozhraní napříč každou cestou přístupu k datům, včetně background úloh, administrativních funkcí, importovaných dat a nepřímých vstupů.
Dynamické prvky dotazůParametry často nedokážou reprezentovat názvy tabulek, sloupců či směry řazení. Mapujte takové volby na pevný allowlist nebo dotaz přenavrhujte, místo vkládání nedůvěryhodného textu.
Snížení důsledkůUdělujte aplikačním identitám pouze nezbytná databázová privilegia, kde je to praktické oddělte role, chraňte přihlašovací údaje spojení, vyhýbejte se nepotřebným databázovým schopnostem a monitorujte abnormální chování dotazů.
Důležité omezeníEscapování, uložené procedury, objektově-relační mapování, validace vstupu či firewall webových aplikací automaticky nezabraňuje SQL injection; bezpečnost závisí na tom, jak je každý dotaz nakonec zkonstruován a proveden.