Akkor fordul elő, amikor egy alkalmazás az adatbázis-utasításokat úgy építi, hogy a parancsszöveget támadó által befolyásolt értékekkel kombinálja anélkül, hogy megbízható határt tartana fenn a kód és az adat között. A sikeres támadás adatot olvashat vagy módosíthat, megkerülheti az alkalmazásellenőrzéseket, vagy meghívhatja az alkalmazásfiók számára elérhető adatbázis-képességeket.
Az elsődleges védelem a lekérdezésszerkezet rögzítése és az értékek paraméterezett felületeken keresztül történő átadása. A bemenetvalidálás üzleti elvárásokat kényszeríthet ki, de nem helyettesíti a paraméterezést; az adatbázis-jogosultságoknak is korlátozniuk kell a következményeket, ha egy másik kontroll meghibásodik.
Legfontosabb pontok
Biztonságos lekérdezés-építésHasználjon prepared statementeket vagy helyesen paraméterezett adatbázis-felületeket minden adathozzáférési útvonalon, beleértve a háttérfeladatokat, adminisztratív funkciókat, importált adatokat és közvetett bemeneteket.
Dinamikus lekérdezési elemekA paraméterek gyakran nem tudják reprezentálni a táblaneveket, oszlopneveket vagy rendezési irányokat. Képezze le az ilyen választásokat rögzített engedélyezési listára, vagy tervezze újra a lekérdezést ahelyett, hogy nem megbízható szöveget szúrna be.
Következmény-csökkentésAdjon az alkalmazásidentitásoknak csak a szükséges adatbázis-jogosultságokat, válassza szét a szerepeket, ahol praktikus, védje a kapcsolati hitelesítő adatokat, kerülje a felesleges adatbázis-képességeket, és figyelje a rendellenes lekérdezési viselkedést.
Fontos korlátAz escape-elés, tárolt eljárások, objektum-relációs leképezés, bemenetvalidálás vagy webalkalmazási tűzfal nem akadályozza meg automatikusan az SQL-injektálást; a biztonság attól függ, hogyan épül fel és hajtódik végre végül minden lekérdezés.