Sie tritt auf, wenn eine Anwendung Datenbankanweisungen erzeugt, indem sie Befehlstext mit vom Angreifer beeinflussten Werten kombiniert, ohne eine zuverlässige Grenze zwischen Code und Daten zu wahren. Ein erfolgreicher Angriff kann Daten lesen oder ändern, Anwendungsprüfungen umgehen oder Datenbankfähigkeiten aufrufen, die dem Anwendungskonto zur Verfügung stehen.
Die primäre Abwehr besteht darin, die Abfragestruktur festzuhalten und Werte über parametrisierte Schnittstellen zu übergeben. Eingabevalidierung kann Geschäftserwartungen durchsetzen, ersetzt aber keine Parametrisierung; Datenbankberechtigungen sollten zudem die Folgen begrenzen, falls eine andere Kontrolle versagt.
Wichtigste Punkte
Sichere AbfragekonstruktionPrepared Statements oder korrekt parametrisierte Datenbankschnittstellen über jeden Datenzugriffspfad hinweg verwenden, einschließlich Hintergrundjobs, administrativer Funktionen, importierter Daten und indirekter Eingaben.
Dynamische AbfrageelementeParameter können häufig keine Tabellennamen, Spaltennamen oder Sortierrichtungen darstellen. Solche Auswahlmöglichkeiten auf eine feste Allowlist abbilden oder die Abfrage neu entwerfen, statt nicht vertrauenswürdigen Text einzufügen.
FolgenreduktionAnwendungsidentitäten nur die nötigen Datenbankprivilegien geben, wo praktikabel Rollen trennen, Verbindungs-Credentials schützen, unnötige Datenbankfähigkeiten vermeiden und abnormales Abfrageverhalten überwachen.
Wichtige EinschränkungEscaping, Stored Procedures, Object-Relational Mapping, Eingabevalidierung oder eine Web Application Firewall verhindern SQL-Injection nicht automatisch; die Sicherheit hängt davon ab, wie jede Abfrage letztlich konstruiert und ausgeführt wird.