dedlfix: Formular: Richtig umgehen mit addslashes() und stripeslashes()

Beitrag lesen

echo $begrüßung;

Muss ich dazu den Formular-Inhalt dann einmal durch die Funktion stripeslashes() jagen, und vor der Ausgabe wieder addslashes() machen, oder wie macht man sowas typischer weise?

Das Feature Magic Quotes hatte den Zweck, Daten für SQL-Statements aufzubereiten. Doch es setzt zu einem falschen Zeitpunkt an. Es müssen nicht sämtliche Eingabedaten sondern die Daten, die in ein SQL-Statement wandern dem Datenbanksystem gemäß behandelt werden. Gibt man die Daten in einem HTML-Kontext aus, wie es bei einem Affenformular üblich ist, wenn Eingabefehler festgestellt wurden, sind die Slashes völlig fehl am Platz. Hier wäre htmlspecialchars() angebracht.

Empfehlenswert ist es, die Magic Quotes generell zu deaktivieren. Kann man die Konfiguration von PHP nicht ändern, oder ist es nicht voraussehbar, welche Konfiguration man antrifft, empfehle ich die Funktion aus Example#2 der eben verlinkten Seite einmalig am Scriptanfang einzubinden.

Wenn nun die Magic Quotes ausgeschaltet oder dessen Auswirkungen beseitigt wurden, kann und sollte man nun die Daten für eine bestimmte Ausgabe kontextspezifisch behandeln.

Die wichtigsten/häufigsten im Webumfeld sind:
Datenbanksystem: die für das System bereitgestellte Funktion (MySQL: mysql_real_escape_string(), Postgres: pg_escape_*(), PDO: ->quote(), usw.)
HTML: htmlspecialchars()
URL: je nach Position urlencode() oder rawurlencode()

Teilweise sind auch mehrere Kontexte zu beachten. Daten, die in eine URL eingebettet werden sollen, die in einem HTML-Kontext steht, sind zuerst URL-gerecht und anschließend HTML-gerecht zu behandeln.

echo "$verabschiedung $name";