Hallo
Wenn ich das nur nochmal kurz zusammenfassen darf, nur um sicherzugehen, dass ich das jetzt auch richtig verstanden habe:
Wenn ich vom Client per
FormData
Inhalte permethod: "post"
ans Backend schicke, dann kommen die in der$_POST
Variable als STRINGS an.Dort reicht daher eine Überprüfung, ob tatsächlich Daten geschickt wurden (
ISSET()
), und ein$braverWert = filter_var($Ursprungswert, FILTER_SANITIZE_SPECIAL_CHARS);
Könnte man das ansatzweise so unterschreiben?
Nein, nicht einmal ansatzweise könnte man das. Wie du selbst konstatierst, kommt in den per POSt übermittelten Daten alles als String oder Array von Strings an. Das bedeutet auch, dass da prinzipiell aller möglicher Mist drinstehen kann, unabhängig davon, was du als Eingabe vorgesehen hast.
Je nach Anwendungsszenario erwartest du als Formularanbieter bestimmte Daten in einem bestimmten Format, wichtiger noch, du willst sie im Zweifelsfall in einem bestimmten Format abspeichern, was speziell in Datenbanken, in denen Feldformate fest vorgegeben sind, in die Hose gehen kann, wenn unerwartete Werte dargeboten werden.
Du kommst also üblicherweise nicht um eine Prüfung jedes einzelnen Feldes gemäß deinen Erwartungen herum.
- Erwartest du Zahlen, prüfe darauf, ob auch Zahlen ankommen. Wenn nicht, ersetze die Eingabe mit einem Vorgabewert oder weise die Eingabe grundsätzlich zurück.
- Erwartest du einen String, prüfe auf unerwünschte Werte und behandle die Kontextwechsel, wenn sie anstehen. Eventuell kannst du, abhängig vom Einsatzfall, noch auf Minimal- und/oder Maximallängen der Strings prüfen.
- Erwartest du Werte aus einem definierten Bereich (üblicherweise im Falle von Radiobuttons, Checkboxen und Selects), prüfe darauf, ob der Eingabewert laut der Definition des Wertebereichs erlaubt ist oder nicht. Wenn nicht, ersetze die Eingabe mit einem Vorgabewert oder weise die Eingabe grundsätzlich zurück.
- Wenn du ein Datum, eine E-Mail-Adresse oder WasAuchImmer mit einer definierten Struktur erwartest, prüfe darauf, ob der Wert dieser Struktur entspricht. Wenn nicht, ersetze die Eingabe mit einem Vorgabewert oder weise die Eingabe grundsätzlich zurück.
Du siehst, es gibt einiges mehr zu beachten, als nur „Sonderzeichen“ auszufiltern.
Tschö, Auge
200 ist das neue 35.