Übergabe von Strings via POST und deren Codierung

Hallo,

ich habe ein Formular, in das Text (möglicherweise auch Quelltext) eingegeben werden soll. Nach der Eingabe, wird das Eingegebene zur Kontrolle erneut angezeigt. Wenn man dieses nun bestätigt, wird die Eingabe in eine MySQL-DB eingetragen.

Mein Problem ist folgendes: In jedem Schritt wird vor ’ (einfache Anführungszeichen) ein \ (Backslash) gesetzt. Somit habe ich irgendwann dann \’ oder ähnliches in der Datenbank stehen, wo eigentlich nur ein einfaches Anführungszeichen stehen sollte. Wie kann ich das Hinzufügen von Escape-Zeichen umgehen oder sie entfernen, bevor die Eingabe in die DB geschrieben wird?

Oder kann man die Eingabe so codieren, dass diese Veränderung/Abwandlung nicht mehr nötig ist?

Gruß
Thomas

ich würde diesen befehl hier nutzen.

http://de.php.net/manual/de/function.htmlspecialchar…

Gruß
Phillip

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

ich würde diesen befehl hier nutzen.

http://de.php.net/manual/de/function.htmlspecialchar…

Vielen Dank für die schnelle Antwort!
Habe es sofort getestet.

Hier mal eine „Testumgebung“:

(Angenommen vorher wurde ein Textfeld mit dem Namen escape ausgefüllt und an dieses Script gesendet)

# Prüfen, ob Eingabe gemacht wurde
if(isset($\_POST['escape'])){

# HTML-Relevante Zeichen umwandeln und Escape-Backslashes entfernen
 $tmp = stripslashes( htmlspecialchars ($\_POST['escape'],ENT\_QUOTES) );

# gesicherten String ausgeben
 echo 'escaped string: 
';
 echo $tmp.'
 ';

# String mit dem Präfix echo versehen
 $tmp='echo \''.$tmp.'\';';

#String mit echo als PHP-Script ausführen
 eval($tmp);
}

Nun hatte ich zuerst das Problem, dass trotz htmlspecialchars() Backslashes hinzugefügt wurden. Diese habe ich nun mit stripslashes() wieder entfernt. Alle bisher getestet Kombinationen an (Sonder-)Zeichen wurden so korrekt angezeigt.
Gibt es eventuell Zeichenkombinationen, die diesem Script gefährlich werden könnten oder gibt es allgemeine Kritikpunkte zu dieser Art der „Sicherung“ des Strings?

Gruß
Thomas

Hallo,

ich habe leider schon eine Schwäche gefunden:

eval() kommt mit den HTML-Codes à la ’ nicht klar.
Dann kam immer die folgende Fehlermeldung:

Parse error: syntax error, unexpected '&' in C:\path\file.php(24) : eval()'d code on line 1

Doch mit einem html_entity_decode($tmp,ENT_QUOTES);
habe ich dieses Problem nun gelöst.

Sobald ich nun jedoch unvollständige TAGS (z.B.

Prüfen, ob Eingabe gemacht wurde

if(isset($_POST[‚escape‘])){

HTML-Relevante Zeichen umwandeln und Escape-Backslashes

entfernen
$tmp = stripslashes( htmlspecialchars
($_POST[‚escape‘],ENT_QUOTES) );

gesicherten String ausgeben

echo 'escaped string:
‚;
echo $tmp.‘
';

String mit dem Präfix echo versehen

$tmp=‚echo ‚‘.$tmp.‘’;’;

#String mit echo als PHP-Script ausführen
eval($tmp);
}

Gruß
Thomas

Siehe http://de.php.net/magic_quotes