dedlfix: Sicherheit bei Formular erhöhen

Beitrag lesen

Hi!

aber ist es nicht so , dass man mit den prepared statements gar kein LIKE übergeben kann, sondern dass es schon im sql statement stehen muß????

Ja, das ist nicht so. Man kann auch eine Parameter für LIKE per Platzhalter übergeben, aber man muss eben die Jokerzeichen wie Datenbestandteile übergeben. Sie müssen also mit in dem gebundenen Wert enthalten sein und nicht am Platzhalter kleben.

es gibt doch 3 Verschiedene methoden etwas ins statement einzufügen:

$pdo->bindValue(...)
$pdo->bindParam(...)
$pdo->bindColumn(...)

Es gibt nur zwei. PDO::bindColumn() scheidet aus, weil es einen Wert aus der Ergebnismenge an eine PHP-Variable bindet, so dass diese bei jedem PDO::fetch() den entsprechenden Wert aus der Zeile erhält und damit enthält.

Die beiden anderen binden Werte in Richtung DBMS.

(Übrigens schreibt man, wenn man außerhalb von Programmcode eine Methode mit ihrem Namen erwähnen möchte, es besser so als ob man sie statisch aufriefe. Das hat den Vorteil, dass der Klassenname mit dabei steht und nicht irgendein Variablenname, der theoretisch auch mit sonstwas instantiiert worden sein könnte. Also für PHP: Klassenname::Methodenname())

kannst Du nicht mal ein Beispiel posten, wie man  konkret mit % oder _ etwas gefährliches über ein Formular einfügen kann.

Das habe ich nicht behauptet. Ich sagte, dass das Ergebnis ein anderes sein kann als erwartet. Wenn der Anwender einen Text sucht, in dem »25% von« enthalten soll, und der gebundene Wert mit den vom Script hinzugefügten Jokerzeichen so aussieht: »%25% von%«, dann findet er alles, wo eine »25« und weiter hinten ein » von« vorkommt. Es muss also (für MySQL) zuerst eine Stringersetzung von % nach % und _ nach \_ vorgenommen werden, anschließend die % vorn und hinten hinzufügen und dann kann das Ergebnis gebunden werden. Inwieweit man damit Daten abfragen kann, die man nicht abfragen soll, hängt von der Anwendung ab.

Lo!