dedlfix: Bewertung: Ist dieses Skript einen Pfifferling wert?

Beitrag lesen

echo $begrüßung;

$query = "SELECT begriff, url FROM lexikon WHERE substr('begriff',0,1) = '$buchstb'"; (oder nur mal zum Testen " ... substr('begriff',0,1) = 'A'").
Was ist da schon wieder falsch?

Wie sucht man Fehler? Eine der wichtigsten Methoden ist, sich Variableninhalte und Ergebnisse von Operationen und auch Zwischenergebnisse von Operationsteilen ausgeben zu lassen.
In deinem Fall wäre das, mal die Datenbank mit
  SELECT substr('begriff',0,1) FROM lexikon
zu befragen. Wenn du dann nicht stutzig wirst, dass du immer b als Antwort bekommst, ...
Wie MudGuard schon sagte hast du hier einen String verwendet. Spaltennamen werden im Allgemeinen ohne Anführungszeichen notiert. Wenn du doch welche brauchst, weil du einen reservierten Bezeichner als Spaltennamen verwendet hast, dann sind bei MySQL Backticks zu verwenden.

Mein Vorschlag: ... Die MySQL-Maskierung übernimmt mysql_real_escape_string() und zwar erst dann, wenn der SQL-Befehl zusammengebaut wird oder unmittelbar davor.

Leider fand ich zig verschiedene Seiten, die Beispiele zur Sicherheit anbieten; war ja schon froh, dass ich dann eine - so dachte ich - gute Lösung gefunden hätte. Auf der einen Seite heißt es htmlspecialchars(); hilft auf einer anderen strip_tags(); ...

Deiner Meinung nach, sollte das hier ja dann helfen, z.B. Bsp. #3 ?

Das ist eigentlich etwas, das ich so nicht vorschlagen würde. Dieses Beispiel kombiniert Eingabe- und Ausgabedatenbehandlung. Damit erreicht es zwar sein Ziel, ist aber programmstrukturtechnisch ungünstig und nur bei kleineren Scripten handhabbar.

Angenommen, du hast ein Affenformular und anschließend soll eine Datenbank mit den Eingaben beschrieben werden. Durch Magic Quotes bekommst du immer ' wenn jemand ' eingibt. Mit jeder "Affen-Runde" vermehren sich die -Zeichen, wenn der Anwender sie nicht jedesmal korrigiert. Ein stripslashes() kurz vor dem SQL-Befehl-Zusammenbau entfernt nur die Zeichen der letzten Runde.
Es ist besser, (Schritt 1) wenn die Daten gleich zum Scriptbeginn von diesen Magic Quotes (oder anderen Transportsicherungen) bereinigt werden. Dann (Schritt 2) durchlaufen sie das Affenformular, wobei bei der Ausgabe der Daten in die Formularfeld-Vorbelegung (<input ... value=[hier]>) HTML-spezifisch kodiert wird (htmlspecialchars()). Sind keine Fehler mehr im Formular geht es weiter zum Datenbank-Teil (Schritt 3) und dort werden die Daten, so wie sie am Ende von Schritt 1 waren - also "entmagicquoted"/transportentsichert aber noch nicht "htmlspecialchared", in den SQL-String eingefügt und dabei mit mysql_real_escape_string() behandelt.

echo "$verabschiedung $name";