Anführungszeichen-Problem in Formularfeldern

Hallo Gemeinde,

ich habe seit neuestem folgendes Problem:

Meine Datenbank ist im Feld „Name“ teilweise gefüllt mit Namen wie:

Grundschule „Juri Gagarin“ oder Gymnasium „Bertholt Brecht“ u.ä.

In der Gesamttabelle werden diese Bezeichnungen auch korrekt ausgegeben, aber wenn ich auf einen Eintrag klicke, um ihn mittels eines Formulars zu editieren, dann wird alles, was bei Name ab dem Anführungszeichen kommt, nicht mehr im Formularfeld „Name“ ausgegeben. Es steht dann lediglich nur noch Grundschule bzw. Gaymnasium (wie vom Beispiel oben), obwohl die Select-Abfrage der Tabelle die gleiche ist. Kann sich jemand von EUch daraus einen Reim machen oder kennt jemand bereits dieses Problem?

Die Spalte in der Tabelle ist als „Text“ angelegt ohne Attribute, das Formularfeld sieht folgendermaßen aus:

Name der Schule:


Hier die SELECT-Abfrage:

mysql_select_db($database_connect, $connect);
$query_Recordset1 = „SELECT * FROM Schulen WHERE schul_id=“.$_GET[„selectedNr“];
$Recordset1 = mysql_query($query_Recordset1, $connect) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);


Jetzt habe ich mir mal den Quelltext des Input-Feldes angesehen und mir ist aufgefallen, dass die Wörter zwischen den Anführungszeichen nun auch in die Attribute des Textfeldes übernommen werden. Wenn also der richtige Eintrag heisst: Schule „Am Wald“ steht nun bei der Abfrage im Quelltext:


Alles klar. Die Ausgabe wird nicht ordnungsgemäß escaped. Soweit, so schlecht, denn nach dem checken der info.php habe ich dort gelesen: magic_quotes_gpc: On (local) On (master)
Ich habe gelesen, dass diese Funktion für das automatische escapen zuständig sein soll…(?)
Nun gibt es noch die Möglichkeiten, mit ‚addslashes‘ und ‚stripslashes‘ zu arbeiten… wäre das in meinem Fall sinnvoll?
Und falls ja: wie „baue“ ich diese Funktion in mein Formular korrekt ein?

Für weitere Tipps bin ich sehr dankbar.

Gruß Estebu

Hallo

Schule „Am Wald“ steht nun bei der Abfrage im Quelltext:


Man würde jetzt ja eigentlich vermuten, dass der Quelltext folgendermaßen lautet:

Das wird wohl daran liegen, dass dir dein Browser nicht den eigentlichen Quelltext anzeigt, sondern eine fehlerkorrigierte Variante. Das kann mitunter nützlich sein, denn wenn die Fehlerkorrektur anspringt, weiß man dass man nachbessern muss. In dem Fall ist es aber eher verwirrend.
Ich vermute mal du hast den Firebug im Firefox verwendet.

Alles klar. Die Ausgabe wird nicht ordnungsgemäß escaped.
Soweit, so schlecht, denn nach dem checken der info.php habe
ich dort gelesen: magic_quotes_gpc: On (local) On
(master)

Ich habe gelesen, dass diese Funktion für das automatische
escapen zuständig sein soll…(?)
Nun gibt es noch die Möglichkeiten, mit ‚addslashes‘ und
‚stripslashes‘ zu arbeiten… wäre das in meinem Fall
sinnvoll?

All diese Funktionen sind hauptsächlich für Datenbanken gedacht. Dort wird durch voranstellen eines Backslash escaped. Damit solltest du dich unbedingt vertraut machen, sonst verursachst du große Sicherheitslücken.

Z.B. sollte man bei einer Datenbankabfrage nicht schreiben

"SELECT \* FROM table1 WHERE id=".$id

sondern

"SELECT \* FROM table1 WHERE id='".addslashes($id)."'"

In dem Zusammenhang ist es wichtig, auch Zahlen in Anführungszeichen und escaped zu übergeben, wenn man nicht zuvor sichergestellt hat das es sich wirklich nur um Zahlen handelt. Das wäre z.B. mit den Funktionen is_numeric() oder ctype_digit() möglich.
Beispiele zum Ausnutzen solcher Sicherheitslücken findest du hier: http://de.wikipedia.org/wiki/SQL-Injection#Ver.C3.A4… (Es ist immer gut zu wissen wie der Feind denkt)

Die Einstellung magic_quotes_gpc = 1 sorgt dafür, dass addslashes() automatisch auf alle GET- POST- und COOKIE-Daten angewendet wird. Das verhindert zwar Sicherheitslücken, allerdings muss man den Spaß mit stripslashes wieder rückgängig machen, wenn man die Daten gar nicht in eine Datenbank schreiben will und deshalb die Backslashes nicht braucht. Diese Einstellung gilt deshalb als veraltet, ab PHP 6 wird sie nicht mehr unterstützt. Man sollte sie also schon mal vorsorglich abschalten.

So, nun zum eigentlichen Problem. Die escape-Funktion für HTML heißt htmlspecialchars(). Anwendung ganz einfach, statt $x schreibst du einfach htmlspecialchars($x).

Diese ganzen Funktionen sind unter http://php.net recht verständlich erläutert.

Johannes

Geil. Das war doch mal eine ausführliche und hilfreiche Antwort!
Ich danke Dir und werde mich weiterbilden.

Gruß Steffen