Remove ads
Prüfung von Daten auf zulässige Werte vor der Verarbeitung Aus Wikipedia, der freien Enzyklopädie
Datenvalidierung 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 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:
Werden 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:
zahl2
'0', schlägt die Division fehl (Teilen durch 0 nicht möglich)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';
}
Um 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 zahl1
ein String, eine Referenz oder undef
und damit keine Zahl oder zahl2 == 0
, erzeugen die angegebenen Regeln (Rules) Zahl
oder ZahlNotZero
eine entsprechende Ausnahme/Fehlermeldung. Was genau passiert, kann im Framework konfiguriert werden und muss den Entwickler hier nicht interessieren. Wichtig ist nur, dass der weitere Programmablauf vor der return
-Anweisung gestoppt wird.
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 Zahl
könnte für einen Integer, eine Gleitkommazahl, eine Rationale Zahl oder eine Komplexe Zahl stehen. Das ist hier nicht näher spezifiziert.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.