Hi!
$SQL = "Update Tabelle SET $Feld = :Wert WHERE
id
= :id";
Hmmm. $Feld kommt aus "unsicherer Quelle". Im Original sitzt $Feld bereits in Backticks. Gemäß Doku müsste ich aber auch auf "ungültige Zeichen" und "reservierte Worte" prüfen. Macht das noch Sinn?
Das steht so nicht im MySQL-Handbuch. Vielmehr reicht es, Backticks zu verwenden und du kannst alle Zeichen und alle reservierten Wörter verwenden. Lediglich Backticks sind zu verdoppeln, damit sie nicht als Ende des Bezeichners aufgefasst werden.
Einer SQL-Injection müsste durch die Parametrisierung eigentlich ausreichend entgegengewirkt sein.
Nein, nicht im Falle des Bezeichners.
Enthält der "Identifier" Müll bzw. Schadcode, müsste m.E. automatisch eine PDOException ausgelöst werden.
Vorausgesetzt, es ergibt sich durch den eingefügten Wert eine ungültige Syntax.
Ich sehe da jetzt kein wirkliches Problem - oder habe ich etwas übersehen?
Du hast gültige Syntax übersehen. Eine erfolgreiche Injection basiert darauf, dass der Ausnutzer gültige Syntax erzeugen kann. Hier reicht es, wenn im Wert für den Bezeichner ein Backtick unverdoppelt zu stehen kommt, denn dann hat man den Bezeichner verlassen und der Rest des Wertes wird als Code interpretiert. Ein Ausnutzer wird in eigenem Interesse für eine gültige Fortsetzung des Statements sorgen.
Lo!