PAS7 Studio

SQL-Injection ohne Mythen: So finden und beheben Sie sie im Projekt

Ein praxisnaher Leitfaden zu SQL-Injection: Funktionsweise, typische Fundstellen im Code, riskante Muster in Sprachen und Frameworks, Teststrategien sowie hilfreiche Tools und Bibliotheken.

01. Aug. 2026· 10 Min. Lesezeit· Technologie
Geeignet fürBackend-EntwicklerFull-Stack-TeamsTech LeadsQA-EngineersProduct Owner
Dunkle Illustration einer SQL-Injection, bei der rote Fragmente vor einer Datenbank an einer blauen Grenze gestoppt werden

Nehmen wir eine Produktsuche. Die Anwendung möchte SELECT * FROM products WHERE name = ? ausführen. Bei einem Parameter erhält die Datenbank Abfragevorlage und Wert getrennt. Verkettet ein Entwickler den String manuell, kann die Eingabe die Struktur von WHERE verändern, eine Bedingung ergänzen oder den Befehl beenden.

SQLi ist ein Interpretationsfehler: vertrauenswürdiger Code und nicht vertrauenswürdige Daten wurden in einem String vermischt. [1]
Die Auswirkung hängt von den Rechten des Datenbankkontos ab: von einem geleakten Datensatz bis zum Lesen, Ändern oder Löschen großer Datenmengen.
Die Behebung beginnt mit Parametrisierung, braucht aber zusätzlich Least Privilege, Logging und Regressionstests. [1]
Testen Sie Ihre eigene Staging-Umgebung oder ein Labor wie PortSwigger Academy; fremde Systeme dürfen nur mit schriftlicher Erlaubnis geprüft werden. [5]
01

Der Benutzer kontrolliert einen Wert

Das kann ein Query-String, JSON-Body, Cookie, Header, CSV-Import, Webhook, Sortierparameter oder eine Queue-Nachricht sein. Wenn eine externe Partei die Quelle verändern kann, behandeln Sie sie als nicht vertrauenswürdig.

02

Der Wert wird mit SQL verbunden

Das Risiko entsteht bei query = '... ' + input + ' ...', Template Strings, Raw Query Buildern oder ORM-Methoden, die fertiges SQL akzeptieren. Eine Formatprüfung ersetzt keine Parametrisierung.

03

Die Datenbank sieht Syntax statt Daten

Sonderzeichen und SQL-Fragmente können Bedingungen ändern, Ergebnisse verbinden, die Antwortzeit beeinflussen oder eine Leseoperation in eine Schreiboperation verwandeln — abhängig von Treiber und Rechten.

04

Der Fehler reicht über einen Endpoint hinaus

Hat der Connection User zu viele Rechte, kann ein kompromittierter Endpoint Tabellen, Reports, personenbezogene Daten, Backups oder Datensätze anderer Tenants gefährden.

Mentales Modell

Fragen Sie nicht nur, ob das Projekt ein ORM verwendet. Fragen Sie, ob externe Eingaben die SQL-Struktur beeinflussen können und mit welchen Rechten die Abfrage ausgeführt wird.

Diese Zahlen müssen korrekt eingeordnet werden. OWASP misst die breite Kategorie Injection, zu der SQLi, XSS und weitere CWEs gehören. MITRE bewertet CWE-89 anhand von CVE-Daten. Das ist weder der Anteil aller Angriffe noch ein Ranking von Programmiersprachen.

274.228

Vorkommen der Kategorie Injection im OWASP-Datensatz; die durchschnittliche Incidence Rate lag bei 3,37 %. [2]

Nr. 2

SQL Injection belegte in MITREs CWE Top 25 für 2025 den zweiten Platz mit einem Score von 28,72. [3]

94 %

der Anwendungen in der Untersuchung wurden auf irgendeine Form von Injection getestet. [2]

Was das für ein Team bedeutet

SQLi ist ein gut beschriebenes, reifes Problem. Das macht Legacy-Code aber nicht automatisch sicher. Die wiederkehrenden Muster helfen bei der Verteidigung, weil sie sich mit statischer Analyse und Tests prüfen lassen.

Beginnen Sie mit dem Data Flow, nicht mit einer Framework-Liste: Finden Sie die externe Quelle, verfolgen Sie sie bis zur Data-Access-Schicht und prüfen Sie den tatsächlichen Treiberaufruf.

Gefährliche Sinks finden

Suchen Sie nach query, execute, raw, text, literal, sequelize.query, knex.raw, jdbc.Statement, SqlCommand und Äquivalenten. Prüfen Sie, ob sie einen verketteten String erhalten.

Dynamisches SQL prüfen

Achten Sie besonders auf ORDER BY, Spalten-/Tabellennamen, Report Builder und Filter. Bind-Variablen können Identifier oft nicht repräsentieren; nutzen Sie stattdessen ein Allow-List-Mapping aus festen Werten. [1]

ORM-Auswege untersuchen

Prüfen Sie Raw SQL, unsichere Operatoren, Custom Scopes, String-Filter und Migrationen. Ein ORM senkt das Risiko nur, wenn das Team seine parametrisierte API nutzt.

Nicht offensichtliche Einstiegspunkte einbeziehen

Admin-Oberflächen, Imports, Cronjobs, Integrationen, GraphQL-Resolver, Such-Endpoints und interne APIs verarbeiten ebenfalls Daten, die zuvor in der Kette manipuliert worden sein können.

Fehlerbehandlung prüfen

SQL-Stacktraces, Tabellen- oder Treibernamen und unterschiedliche Fehler erleichtern die Diagnose eines Angriffs. Nach außen gehört eine sichere Fehlermeldung; Details bleiben in Correlation-ID-Logs.

Es gibt kein seriöses Ranking der gefährlichsten Sprache: SQLi ist überall möglich, wo SQL auf eine unsichere API trifft. Der Unterschied liegt darin, wie leicht man versehentlich vom parametrisierten Weg zu Raw SQL wechselt.

ÖkosystemTypischer RisikopunktSicherer DefaultWas prüfen
PHP: Laravel / SymfonyDB::raw, Query Strings, alter mysqli/PDO-CodeQuery Builder/Eloquent Bindings, PDO Prepared Statementsraw(), gebundene Parameter, Legacy-Controller
JavaScript / TypeScript: Node.jspg/mysql2 Template Strings, knex.raw, Sequelize rawDriver-Placeholders, Prisma-Parameter, Query Builder$queryRawUnsafe, raw(), dynamische Filter
Python: Django / SQLAlchemycursor.execute-Konkatenation, text() mit StringDjango QuerySet, gebundene SQLAlchemy-Parameterextra(), raw(), Literal-SQL, f-Strings
Java: Spring / HibernateStatement, String-Konkatenation, HQL-InterpolationPreparedStatement, JPA-Parameter, Named ParameterscreateNativeQuery, HQL-Interpolation
.NET: ASP.NET / EF CoreFromSqlRaw oder SqlCommand mit StringLINQ, FromSqlInterpolated, ParameterRaw-Methoden, interpoliertes SQL, Datenbankrolle
Go / Rustdatabase/sql oder Client-APIs mit String-AufbauQueryContext/Execute-Placeholders, sqlx-Bindfmt.Sprintf, format!, dynamische Identifier

Das Fazit zum Stack

Das größte Risiko kommt nicht von einer Sprache, sondern von Teams, die Input mit Query-Text vermischen, Raw SQL ohne Review erlauben oder der Anwendung eine DBA-Rolle geben.

Unsicher: Der String weiß zu viel

TS
const sql = `SELECT * FROM users WHERE email = '${email}'`;
const result = await db.query(sql);

Hier wird email Teil des SQL-Texts. Auch wenn das zunächst nur eine Suche ist, wird dieses Muster leicht in Login-, Export- oder Admin-Funktionen kopiert.

Sicherer: Der Treiber trennt Werte

TS
const result = await db.query(
  "SELECT * FROM users WHERE email = $1",
  [email],
);

Der Query-Text bleibt fest und email wird als Wert übergeben. Die Placeholder-Syntax hängt vom Treiber ab — folgen Sie der Dokumentation Ihrer Client-Bibliothek.

Für Sortierfelder: Mapping statt Bind

TS
const columns = { newest: "created_at", price: "price" } as const;
const column = columns[input] ?? columns.newest;
const sql = `SELECT * FROM products ORDER BY ${column}`;

Spaltennamen sind keine normalen Bind-Werte. Erlauben Sie nur Schlüssel aus einer festen Liste und setzen Sie niemals Raw Input direkt ein.

Kein einzelnes Tool sieht das gesamte Bild. Der stärkste Workflow kombiniert Code-Analyse, Endpoint-Tests und Runtime-Beobachtung.

CodeQL

SAST zur Verfolgung von User Input bis zu SQL-Sinks in JavaScript/TypeScript, Python, Java, C# und weiteren unterstützten Sprachen. In CI integrieren und Findings mit dem Code Owner prüfen.

Semgrep

Schnelle Pattern- und Data-Flow-Regeln für lokale Checks und Pre-Commit. Damit lassen sich konkrete unsichere Aufrufe wie Raw Queries ohne Parameter verbieten.

Burp Suite / OWASP ZAP

DAST für Staging: Proxy, Request-Replay sowie aktive und passive Scans. Nur mit freigegebenem Scope arbeiten und keine destruktiven Checks gegen Production ausführen.

PortSwigger Web Security Academy

Eine sichere Lernumgebung mit SQLi-Labs zu Error-Based, Blind, UNION und weiteren Szenarien. Das Team kann üben, ohne Kundendaten zu berühren.

Sentry / DB-Audit-Logs / WAF

Achten Sie auf ungewöhnliche 4xx/5xx-Spitzen, Latenz, SQL-Parserfehler, Massen-SELECTs, auffällige User-Agents und ungewöhnliche Tabellenzugriffe. Ein WAF reduziert Risiko, ersetzt aber keinen Code-Patch.

OWASP empfiehlt mehr als einen Filter. Bauen Sie eine Defense-in-Depth-Baseline auf und machen Sie sie zum Bestandteil der Definition of Done.

Parametrisierte Abfragen oder sichere Stored Procedures verwenden; dynamisches SQL braucht eine Allow-List und ein separates Review. [1]

Escaping nicht als primären Schutz verwenden: OWASP bezeichnet es als fragil und empfiehlt es nur als letzten Ausweg für Legacy-Code. [1]

Einen eigenen Datenbankbenutzer mit minimalen SELECT/INSERT/UPDATE-Rechten verwenden, niemals eine DBA-/Owner-Rolle. Read-only Flows bekommen Read-only Accounts oder Views. [1]

Keine Secrets oder Produktionsdaten loggen. Endpoint, Actor, Request-ID und Policy-Ergebnis erfassen, aber kein vollständiges SQL mit personenbezogenen Parametern.

Negative Tests ergänzen: Anführungszeichen in legitimen Namen, lange Strings, Unicode, falsche Typen, unbekannte Sortierschlüssel, Cross-Tenant-IDs und Grenzwerte.

Treiber, ORM und Datenbank aktuell halten, Updates aber nicht mit sicherem Query-Aufbau verwechseln.

Erste Stunde

Schaden begrenzen

Endpoint, Zeitpunkt, Request-ID und Scope sichern. Bei Bedarf Feature deaktivieren, Route einschränken oder die Datenbankrolle auf Read-only reduzieren. Logs nicht löschen und nicht in Production experimentieren.

Am selben Tag

Root Cause beheben

String-basiertes SQL durch eine parametrisierte API ersetzen, Allow-List-Mapping für Identifier ergänzen, Rechte prüfen und einen Regressionstest schreiben, der gegen die alte Implementierung fehlschlägt.

Nach dem Patch

Blast Radius prüfen

Datenbank-Audit-Logs, ungewöhnliche Exporte, Datenänderungen, Service Accounts und Zugriffe auf andere Tenants prüfen. Dokumentieren, was gelesen oder verändert worden sein könnte.

Vor dem Abschluss

Prozess verbessern

SAST/DAST in CI, eine Review-Regel für Raw Queries, eine Least-Privilege-Migration und ein kurzes Incident-Playbook ergänzen. Sonst taucht die nächste SQLi an einem anderen Endpoint auf.

Schützt ein ORM vor SQL-Injection?

ORMs parametrieren Standardabfragen meistens, schützen aber nicht automatisch vor Raw SQL, unsicheren Operatoren, dynamischen Identifiern oder eigenen Query Buildern. Prüfen Sie Escape Hatches und Team-Regeln.

Reicht es, zu prüfen, ob ein Feld nur Ziffern enthält?

Formatvalidierung hilft, ist aber kein universeller Schutz. Verwenden Sie parametrisierte Abfragen für Werte und feste Allow-List-Mappings für Tabellen, Spalten und Sortierung.

Kann SQLi in GraphQL auftreten?

Ja. GraphQL verändert die API-Form, aber ein Resolver kann Argumente weiterhin in unsicheres SQL, Filter oder Raw Queries übergeben. Verfolgen Sie den Data Flow vom Resolver bis zum Datenbank-Client.

Löst ein WAF das Problem?

Ein WAF kann bekannte Muster blockieren und die Ausnutzung reduzieren, behebt aber keinen unsicheren Query-Aufbau und deckt nicht garantiert jede Verschleierung oder Business-Route ab. Patch, Least Privilege und Tests bleiben nötig.

Wie kann ein Team SQLi sicher üben?

Nutzen Sie eine lokale Sandbox, OWASP Juice Shop, WebGoat oder PortSwigger Academy. Testen Sie niemals fremde Websites, Kunden-APIs oder Production-Systeme ohne ausdrücklich freigegebenen Scope.

Geprüft: 01. Aug. 2026Gilt für: WebanwendungenGilt für: REST-APIsGilt für: GraphQL-APIsGilt für: HintergrundjobsGilt für: Admin-OberflächenGetestet mit: OWASP Top 10:2021Getestet mit: CWE Top 25:2025Getestet mit: OWASP SQL Injection Prevention Cheat Sheet

PAS7 Studio kann API, Admin-Oberfläche und Data-Access-Layer prüfen: Raw SQL finden, Tenant-Grenzen testen, SAST/DAST in CI konfigurieren, Datenbankrechte reduzieren und einen priorisierten Behebungsplan erstellen.

Verwandte Artikel

ai-assistants

AI Assistant Entwicklung Kosten 2026: RAG, Knowledge Base, Integrationen und Support

Praktischer Leitfaden zu Kosten fuer AI Assistants: RAG, Knowledge Base, Channels, Tool Use, Guardrails, Evaluations, Monitoring und Support.

blogs

AI-assisted Attacks und Prompt Injection 2026: neue Angriffsfläche für AI-Produkte

AI-assisted Attacks und Prompt Injection 2026: neue Angriffsfläche für AI-Produkte. Ein praktischer PAS7-Studio-Sicherheitsleitfaden mit Threat Model, Kontrollen, Rollout-Checklist, Fehlern und Quellen.

blogs

KI fur Landingpage-Entwicklung: wo sie Launches beschleunigt und wo sie Conversion schadet

Eine praxisnahe Analyse zur Nutzung von KI fur Landingpages: v0, Webflow AI, Builder.io, Framer-ahnliche Builder, UX-Generierung, Copy, SEO, Personalisierung, A/B-Tests, Template-Risiken, Accessibility, Security und technischer Schuldenaufbau.

growth

AI SEO / GEO im Jahr 2026: Ihre nächsten Kunden sind nicht Menschen — sondern Agents

Suche verschiebt sich von Klicks zu Antworten. Bots und AI-Agents crawlen, zitieren, empfehlen — und kaufen zunehmend. Erfahren Sie, was AI SEO / GEO bedeutet, warum klassisches SEO nicht mehr reicht und wie PAS7 Studio Marken im agentischen Web sichtbar macht.

Professionelle Entwicklung für Ihr Geschäft

Wir erstellen moderne Web-Lösungen und Bots für Unternehmen. Erfahren Sie, wie wir Ihnen helfen können, Ihre Ziele zu erreichen.