Wie überprüft man Formulareingaben sinnvoll?

guenter024

Erfahrenes Mitglied
Hallo PHP-Freunde...

nach dem Erstellen eines Formulars stellt sich für mich nun die Frage nach der Überprüfung der Eingaben. Lese mich schon seit ein paar Tagen im www durch so manche Threads, Tutorials, usw. , finde aber keine so richtige Erklärungen.

Welche Abfragen sind eurer Meinung nach wo sinnvoll und welche Abfragen sind wo unerlässlich?
Kann man sowas irgendwo nachlesen?

Wäre über Feedback dankbar.

Ciao Günni
 
Kommt auf dein Formular an und was damit gewollt bwz bezweckt wird,

Soll alle Felder ausgefüllt werden dann prüfen ob eine eingabe gemacht worden ist.
Soll bestimmter inhalt im felder ausgefüllt werden dann den Regulären ausdruck prüfen.
(Bsp. Mail adressen unsw.)

Unsw,

Danach noch die Pflicht prüfungen der Sicherheitshalber damit kein Fremder code eingeschleust werden kann.
(Sql-injection,Scripting angriffe unsw.)

Mfg Splasch
 
Kommt auf dein Formular an und was damit gewollt bwz bezweckt wird,
In meinem Fall ist es im Moment ein Kontaktformular ...

Soll alle Felder ausgefüllt werden dann prüfen ob eine eingabe gemacht worden ist.
Soll bestimmter inhalt im felder ausgefüllt werden dann den Regulären ausdruck prüfen.
(Bsp. Mail adressen unsw.)

Unsw,

Danach noch die Pflicht prüfungen der Sicherheitshalber damit kein Fremder code eingeschleust werden kann.
(Sql-injection,Scripting angriffe unsw.)

... und genau darauf möchte ich ja näher eingehen.
Möglichkeiten findet man so viele und verschiedene, das man überhaupt nicht so recht durchblickt was macht Sinn und was nicht..

Ich bin mir in puncto Sicherheit nicht so recht sicher, in welchem Formularfeld sich z.B. welche Gefahr verbirgt... oder mach ich mir da zu viel Sorgen ich meine im Leben kann man sich auch auf alles mögliche versichern, aber mehr als die Hälfte kann man sich sparen...

Also meine Frage: was macht Sinn! Mit welchen Befehlen sichert man sich wo ab
 
Muss ein wenig schmunzeln bei deiner Frage, welches Formularfeld wie gefährlich sei ^^

Grundsätzlich sollte mit [phpf]ctype_print[/phpf] überprüft werden, ob es sich um einen String handelt, der nur druckbare Zeichen beinhaltet (inklusive Leerzeichen). Das kannst du mit einem Regex aber noch viel schöner machen:
PHP:
<?php
setlocale(LC_ALL, 'de');
if (preg_match('=^[\w]+[\w\s]+[\w]+$=is', $input) < 1) {
    // nicht valide
}

Somit schließt du aus, dass in wichtigen Feldern zB eine Eingabe nur aus Leerzeichen bestehen könnte und so weiter... Situationsbedingt muss der Regex natürlich angepasst werden. Für die Validierung von Mailadressen habe ich neulich schonmal irgendwo nen Regex gepostet... Ansnonsten findet man auch schnell was unter [phpf]preg_match[/phpf] zum Thema.

Benutzereingaben in Qeries zu verwenden, ist grob fahrlässig ohne ein ordentliches Escaping. Dazu gibt es zB [phpf]mysql_real_escape_string[/phpf] und weitere...

Ansonsten kann man wohl nicht viel mehr dazu sagen - Ne konkretere Fragestellung wäre eventuell angebracht.
 
Ne konkretere Fragestellung wäre eventuell angebracht.
dass in wichtigen Feldern zB eine Eingabe nur aus Leerzeichen bestehen könnte und so weiter...

na ja, z.B. was sind denn beispielsweise "wichtige Felder", was genau meinst du damti
Ob überhaupt eine Eingabe gemacht wurde zu prüfen ist ja nicht meine Frage ... ^^

ich hoffte da würde sich mal jemand darüber auslassen.
 
guenter0241480996 hat gesagt.:
Ich bin mir in puncto Sicherheit nicht so recht sicher, in welchem Formularfeld sich z.B. welche Gefahr verbirgt...
Nicht das Formular ist die Schwachstelle sondern die Verarbeitung der von ihm übergebenen Werte. Das Formular ist nur die Schnittstelle zur Kommunikation mit dem Webserver.

Die Frage, wie unsichere Eingaben entdeckt und unschädlich gemacht werden können, hängt davon ab, welche Werte erwartet werden und wie sie serverseitig verarbeitet werden.
 
PHP:
<?php
isset($value1, $value2, /* ... */); // prüft, ob Variable gesetzt ist
empty($value); // prüft, ob variable (!) gesetzt ist und / oder leer ist (leerer Wert)

preg_match($regex, $string); // matcht auf regulären Ausdruck
// ctype functions, wie zB ctype_print für die Validierung von zugelassenen Zeichengruppen

// escape Funktionen zum Absichern eines Strings für weitere Verarbeitungen

Das sind die Grundlagen, die man prinzipiell verwenden kann und sollte (je nach Anwendung).
Wichtige Eingaben sind zB sowas wie Name und Anschrift, Mailadresse, etc. Weniger wichtige Eingaben, die nur optional sind, wären je nach Einsatzzweck eventuell auch die Anschrift, Altersangabe oder was auch immer.
Letztere können bei empty() auch gerne mal true zurückgeben - "Name" und so weiter sollten jedoch immer aus mindestens x Zeichen bestehen und einen bestimmten regulären Ausruck matchen (zB keine Zahlen im Namen und auch keine "nur Leerzeichen" Eingaben):
PHP:
preg_match('=^[\w]{2,}[\ws]*[\w]{2,}$=is', $name);
Dieser Regex matcht zB nur, wenn am Anfang mindestens zwei Buchstaben stehen und am Ende des Strings ebenfalls. Dazwischen können mehrere Leerzeichen und weitere Buchstaben auftauchen.

Wie immer gilt aber: Individuelle Problemkomponenten erfordern individuelle Lösungen ;)
 
Erwartet man in einem Kontaktformular nicht immer dieselben Werte?
Wird nicht jedes Kontaktformular auf gleiche Weise verarbeitet?

Genau deren Verarbeitung in punkto sicherheit war ja meine Frage.
Reden hier alle nur um den heissen Brei?
 
@maeTimmae

endlich jemand der Klartext redet (schreibt) ;)

Also genügt es, nur zu prüfen ob Zahlen oder Buchstaben im Feld eingegeben wurden, und in etwa die zu erwartende Länge? (ausgenommen natürlich das E-Mail feld).
 
Erwartet man in einem Kontaktformular nicht immer dieselben Werte?
Wird nicht jedes Kontaktformular auf gleiche Weise verarbeitet?

Kann dir beide fragen mit Nein beantworten.

Man kann nie voher wissen was ein User da in deinen Forumlar einträgt.
sb. einen Sql befehl der deine Datenbank löscht.oder er benutz einen javascript befehl und leg deine Webseite damit lahm.oder er liest nur die Admínzugangsdaten aus unsw.

Zu verabeitung das häng davon ab wie es geschrieben wurde also die Php abfrage je nach dem wird ein Formular wert immer anderes behandelt.

Mfg Splasch
 
Zurück