Hi!
In die Datenbank sollte wirklich nur der in das Formular eingegebene Wert eingetragen werden, d.h. Funktionen wie strip_tags() oder htmlentities() sollten erst bei der _Ausgabe_ angewandt werden.
ich habe irgendwo gelesen, dass strip_tags unbedingt angewandt werden soll, damit man keinen php-Code einschleusen kann, der evtl. bösen Schaden anrichtet?! htmlentities erst bei der Ausgabe ist ja logisch.
Nein, zum Eintragen von Daten in eine DB sollte strip_tags() nicht verwendet werden. Darüber hinaus macht strip_tags() oftmals mehr als einem lieb ist: Stell dir vor jemand gibt 4 < 5 in dein Textfeld ein - anschließend ist von dieser Gleichung nichts mehr zu sehen ;-) Wenn du deine Daten immer folgendermaßen einträgst und beim Ausgeben mit htmlentities() behandelst, solltest du keine Probleme bekommen:
$sql = "INSERT INTO
tabelle
(feld1, feld2)
VALUES
('".mysql_real_escape_string($_POST['feld1'])."',
'".mysql_real_escape_string($_POST['feld2'])."'
)";
Beachte hierbei insbesondere die Folge der einfachen und doppelten Anführungszeichen!
Dazu gehört übrigens auch die Entfernung eventueller Maskierungs-Backslashes (bedingt durch magic_quotes).
Heißt das, mein Problem beruht auf magic_quotes? Aber außer strip_tags verwende ich doch nichts vor der Übergabe!?
magic_quotes macht - ebenso wie strip_tags() - oftmals mehr Probleme als es lösen soll. Aus diesem Grund könntest du magic_quotes in der php.ini auf Off stellen oder du verwendest jedesmal nach $_POST oder $_GET eine Funktion, wie du sie auf php.net findest (stripslashes_deep() für Arrays, ansonsten einfaches stripslashes()).
Stattdessen solltest du beim Eintragen auf Funktionen wie mysql_real_escape_string() zurückgreifen, die alle diejenigen Zeichen maskieren, die beim Eintragen Probleme machen könnten.
Ist das die "korrekte Behandlung", die wahsaga von mir fordert?
Ja, das wäre eine Möglichkeit.
Grüße,
Fabian St.