dedlfix: PHP MySQL Datenbank durchsuhen

Beitrag lesen

echo $begrüßung;

wenn ich magic_quotes nicht abschalte aber dafür mysql_real_escape_string() verwende bin ich dann auf der sicheren seite?

Dann bist du auf der unsinnigen Seite, weil du zusätzlich zur Behandlung durch die Magic Quotes noch eigene Behandlung hinzufügst und somit etwas völlig unbrauchbares entsteht und nur noch mehr Folgefehler nach sich zieht.

Magic Quotes steht aufgrund seiner Nebenwirkungen auf der Abschussliste. Vergiss, dass es dir irgendwelche Vorteile oder Sicherheiten bringt, denn es bringt dir auch genügend Nachteile. Deaktiviere es oder mach seine Auswirkungen einmalig am Scriptanfang rückgängig. Diese Rückgängigmachung kannst du dann bei PHP6 recht einfach entfernen und musst nicht das gesamte Script nach stripslashes() durchsuchen.

Nachdem nun deine Eingabedaten in Rohform vorliegen, musst du dir das Prinzip der kontextgerechten Behandlung zu Herzen nehmen. Wann immer ein Wert in einen anderen Kontext gebracht wird, behandle ihn dem Kontext entsprechend. Fügst du etwas in HTML ein, behandle die HTML-eigenen Zeichen <>& und gegebenenfalls " und '. PHP stellt dafür htmlspecialchars() zur Verfügung. Fügst du einen Wert in einen MySQL-String ein, nimm mysql_real_escape_string() zur kontextgerechten Behandlung. Fügst du etwas in eine URL ein, nimm eine URL-gerechte Behandlung. Und so weiter, und so fort. Beachte auch Schachtelungen. Ein Wert in eine URL einfügen, die in ein HTML-Dokument eingefügt werden soll benötigt zuerst eine URL-gerechte Behandlung des Wertes und die fertige URL eine HTML-gerechte Behandlung.

Die Behandlung ist übrigens erst genau zum Zeitpunkt des Kontextwechsels sinnvoll, nicht irgendwann weit vorher oder gar in einem früheren Bearbeitungsschritt. HTML-gerechte Behandlung hat in einer Datenbank nichts zu suchen. Auch dann nicht, wenn du heute weißt, dass diese Daten immer in einem HTML-Kontext ausgegeben werden sollen.

Wenn du diesen Grundsatz der kontextgerechten Behandlung konsequent (und fehlerfrei) einhältst, bist du auf der sicheren Seite was die Injection-Lücken angeht, egal was dir deine Anwender für Daten unterjubeln oder welche erwünschten Sonderzeichen sie enthalten.

echo "$verabschiedung $name";