Prepared Statements
Sicherheit & Praxis
Bedeutung
Ein Prepared Statement (vorbereitete Anweisung) ist eine SQL-Abfrage, die du der Datenbank zunächst mit Platzhaltern bekannt machst und erst danach mit konkreten Werten ausführst. Die Datenbank zerlegt und plant die Abfrage einmal vorab – die später eingesetzten Werte können die Struktur nicht mehr verändern. Genau das verhindert SQL Injection.
Die drei Schritte: prepare, bind, execute
- prepare: Die SQL-Anweisung mit Platzhaltern an die Datenbank schicken, die sie analysiert und einen Ausführungsplan erstellt.
- bind: Den Platzhaltern konkrete Werte zuordnen (binden).
- execute: Die Anweisung mit den gebundenen Werten ausführen.
Konzeptuelles Beispiel
So sieht der Ablauf (vereinfacht, sprachunabhängig) aus:
-- 1. prepare PREPARE stmt FROM 'SELECT Name FROM Kunden WHERE Land = ?'; -- 2. bind: Wert für ? festlegen SET @land = 'DE'; -- 3. execute EXECUTE stmt USING @land;
| Name |
|---|
| Müller GmbH |
| Schmidt AG |
Dasselbe vorbereitete Statement kannst du mit anderen Werten erneut ausführen, ohne es neu zu planen.
Warum sie Injection verhindern
Der entscheidende Punkt: Die SQL-Struktur steht beim prepare bereits fest. Gebundene Werte werden ausschließlich als Daten eingesetzt und nie als SQL-Code interpretiert. Eine Eingabe wie ' OR '1'='1 bleibt damit ein harmloser Suchtext.
Weitere Vorteile
- Performance: Wird dasselbe Statement oft mit verschiedenen Werten ausgeführt, spart die einmalige Planung Zeit.
- Lesbarkeit: SQL-Logik und Werte sind sauber getrennt.
Warum schützen Prepared Statements vor SQL Injection?
Hinweis
In der Praxis bietet jede Programmiersprache fertige Schnittstellen dafür (etwa PDO oder mysqli in PHP, JDBC in Java). Nutze sie konsequent und übergib Eingaben stets als Parameter – baue SQL niemals per String-Verkettung zusammen.