Apare atunci când o aplicație construiește instrucțiuni de bază de date combinând text de comandă cu valori influențate de atacator, fără a păstra o frontieră fiabilă între cod și date. Un atac reușit poate citi sau modifica date, ocoli verificările aplicației sau invoca capabilități ale bazei de date disponibile contului aplicației.
Apărarea primară este păstrarea structurii interogării fixă și transmiterea valorilor prin interfețe parametrizate. Validarea intrărilor poate aplica așteptări de afaceri, dar nu înlocuiește parametrizarea; permisiunile bazei de date trebuie și ele să limiteze consecințele dacă un alt control eșuează.
Puncte esențiale
Construcție sigură a interogărilorFolosiți instrucțiuni pregătite sau interfețe de bază de date corect parametrizate pe fiecare cale de acces la date, inclusiv joburi în fundal, funcții administrative, date importate și intrări indirecte.
Elemente dinamice de interogareParametrii adesea nu pot reprezenta nume de tabele, nume de coloane sau direcții de sortare. Mapați astfel de alegeri la o listă de permisiuni fixă sau reproiectați interogarea, în loc să inserați text nesigur.
Reducerea consecințelorDați identităților aplicației doar privilegiile de bază de date necesare, separați rolurile acolo unde este practic, protejați credențialele de conexiune, evitați capabilitățile inutile ale bazei de date și monitorizați comportamentul anormal al interogărilor.
Limitare importantăEscaping-ul, procedurile stocate, maparea obiect-relațională, validarea intrărilor sau un firewall pentru aplicații web nu previn automat injecția SQL; siguranța depinde de cum este fiecare interogare în cele din urmă construită și executată.