Daten validieren
Unter der Validation von Daten versteht man, dass überprüft wird, dass die vom Benutzer übergebenen Daten auch dem erwartetem Format entsprechend. Übergebt ihr als GET-Parameter beispielsweise die ID zu einem Artikel in eurem Onlineshop, so solltet ihr überprüfen dass diese übergebene Wert auch tatsächlich eine Zahl ist. Durch eine gute Datenvalidierung könnt ihr euren Schutz gegen SQL-Injections und Cross-Site-Scripting deutlich erhöhen.
Neben der Erhöhung der Sicherheit bekommt ihr durch eine gute Validierung der Eingabedaten auch eine gesteigerte Nutzererfahrung, da Falscheingaben so frühzeitig abgefangen werden.
Prinzipiell solltet ihr alle Eingaben eurer Benutzer überprüfen und durch geeignete Hinweise auf Falscheingaben hinweisen. Ein Vertipper bei der E-Mail-Adresse passiert schnell und kann ärgerlich sein, wenn dieses nicht auffällt.
Inhaltsverzeichnis
Wie und wo sollte die Validierung stattfinden?
Viele Programmierer machen den Fehler, die Datenvalidierung nur im Frontend zu implementieren beispielsweise wird mittels JavaScript die Eingaben in einem Formular überprüft. Sollte der Benutzer eine falsche Eingabe machen so erscheint eine Warnung mit einem Hilfetext, welches Format erwartet wird, z.B. dass in dem Feld nur eine Zahl erlaubt ist. Aus Sicht der Benutzerfreundlichkeit ist dies super, aus der Sicherheitsperspektive bringt dies aber herzlich wenig. Ein Angreifer könnte einfach eure JavaScript-Validierung deaktivieren und schon beliebige, möglicherweise boshafte Eingaben tätigen.
Deswegen sollte eure Datenvalidierung stets in PHP stattfinden, bevor ihr diese Daten an eure Datenbank sendet. Ebenfalls sollte eure Datenbankspalten den entsprechend passenden Typen besitzen. Benötigt ihr in einer Spalte nur Zahlen, so solltet ihr diese Spalte als int definieren.
Gängige Validierung in PHP
Nachdem ihr die Benutzerdaten abfragt, sollte direkt die Überprüfung dieser Daten stattfinden. So minimiert ihr das Risiko, dass böshafte Eingaben Schaden anrichten können.
Überprüfung auf Integer
Die gängigste Überprüfung ist das Testen ob ihr eine ID erhalten habt. Mittels is_numeric($eingabe) könnt ihr überprüfen ob die Eingabe numerisch ist. Mittels der Funktion intval($eingabe) könnt ihr eine Eingabe in einen Integer umwandeln.
1 2 3 4 5 |
<?php if(!isset($_GET['id']) || !is_numeric($_GET['id'])) { die("Bitte eine ID spezifizieren"); } $id = intval($_GET['id']); |
Überprüfung das ein Feld ausgefüllt wurde
Zum Überprüfen dass eine Eingabe nicht leer war könnt ihr die Funktion empty($eingabe) nutzen:
1 2 3 4 5 6 |
<?php $username = isset($_POST['username']) ? $_POST['username'] : ""; if(empty(trim($username)) { die("Dein Benutzername darf nicht leer sein"); } |
Überprüfung auf die Gültigkeit der E-Mail-Adresse
Die Gültigkeit einer E-Mail-Adresse lässt sich wie folgt überprüfen:
1 2 3 4 5 6 |
<?php $email = isset($_POST['email']) ? $_POST['email'] : ""; if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) { die("Die Email-Adresse war ungültig"); } |
Überprüfung auf die Gültigkeit einer URL
Ähnlich lässt sich auch überprüfen ob eine Eingabe eine valide URL ist:
1 2 3 4 5 6 |
<?php $url= isset($_POST['url']) ? $_POST['url'] : ""; if (empty($url) || !filter_var($url, FILTER_VALIDATE_URL)) { die("Die URL war ungültig"); } |
Überprüfung der Länge der Eingabe
Mittels strlen($eingabe) lässt sich die Länge der Eingabe überprüfen:
1 2 3 4 5 6 |
<?php $passwort = isset($_POST['passwort']) ? $_POST['passwort'] : ""; if(strlen($passwort) < 8) { die("Dein Passwort muss mindestens 8 Zeichen haben"); } |
Fortgeschrittene Validierung mittels RegEx
Manchmal sind kompliziertere Regeln notwendig, beispielsweise erwartet ihr ein gewisses Format, oder es sind nur gewisse Buchstaben erlaubt in eurer Eingabe. In diesen Fällen kann man auf Reguläre Ausdrücke zurückgreifen.
Autor: Nils Reimers