DatenvalidierungDatenvalidierung in der Softwaretechnik bezeichnet die Prüfung von beispielsweise Benutzereingaben. Weil fehlende oder unbrauchbare Eingaben zu schwerwiegenden Fehlern innerhalb eines Programms führen können, sollten diese Werte vor einer Übernahme in ein Programm validiert werden. Validierung als PlausibilitätsprüfungValidierung versteht sich als Test auf Plausibilität (englisch Sanity Check), bei dem ein konkreter Wert darauf geprüft wird, ob er zu einem bestimmten Datentyp gehört oder in einem vorgegebenen Wertebereich oder einer vorgegebenen Wertemenge liegt. Viele Programmfehler und Sicherheitsprobleme sind auf fehlende Plausibilisierung von Eingabewerten zurückzuführen. Für die Validierung gilt die goldene Regel: never trust the user ‚traue niemals dem Benutzer‘ (auch: Never trust a user input ‚traue niemals einer Benutzereingabe‘). Die Validierung von Werten kann an verschiedenen Punkten der Lebenszeit einer Software stattfinden:
Einsatzgebiete
Beispiel für das Validieren von Benutzereingaben in PHPWerden Eingaben eines Benutzers nicht validiert, kann es im weiteren Programmverlauf zu Fehlern kommen. Hier ein Beispiel für ein PHP-Skript, welches Formulardaten via HTTP-POST empfängt und die erste Zahl durch die zweite dividiert: $zahl1 = $_POST['zahl1'];
$zahl2 = $_POST['zahl2'];
echo $zahl1 / $zahl2;
Hier hat der Entwickler einige mögliche Fehlerquellen nicht bedacht:
Unter Aspekten der Prüfung müssen diese Punkte also ausgeschlossen werden, um ein fehlerfreies Arbeiten zu ermöglichen: if(isset($_POST['zahl1']) && isset($_POST['zahl2'])) { // Sind überhaupt beide Textfelder ausgefüllt?
$zahl1 = $_POST['zahl1'];
$zahl2 = $_POST['zahl2'];
if(is_numeric($zahl1) && is_numeric($zahl2)) { // Sind beide Angaben numerisch?
if($zahl2 != 0) { // Ist zahl2 ungleich 0 ?
echo $zahl1 / $zahl2;
} else {
echo 'Teilen durch 0 unmöglich!';
}
} else {
echo 'Beide Felder dürfen nur Zahlen enthalten';
}
} else {
echo 'Bitte füllen Sie beide Textfelder aus';
}
Beispiel für Orthogonale Validierung in PerlUm den Programmieraufwand zu reduzieren und den Code übersichtlicher zu gestalten, kann man die Prüfungen und die daraus resultierenden Fehlermeldungen/Exceptions auslagern. Perl Code ohne Validierung: sub division {
my $zahl1 = shift;
my $zahl2 = shift;
return $zahl1 / $zahl2;
}
Unter Einsatz eines Validierungsframeworks, hier Scalar::Validation,[1] muss der Code für eine vollständige Validierung nur geringfügig erweitert werden: use MyValidation;
sub division {
my $zahl1 = validate (zahl1 => Zahl => shift);
my $zahl2 = validate (zahl2 => ZahlNotZero => shift);
return $zahl1 / $zahl2;
}
Ist Die Regeln können irgendwo definiert und getestet werden, sie können z. B. auch aus einer Datenbank stammen oder erst zur Laufzeit definiert werden: Die Regel Siehe auchWeblinks
Einzelnachweise |