User Input (Benutzereingabe)
Kurz: Daten, die ein Programm während der Laufzeit interaktiv vom Nutzer entgegennimmt — etwa über die Konsole, ein Formularfeld oder ein Dialogfenster.
Genauer: Eingaben kommen als Text und müssen oft erst in den passenden Datentyp umgewandelt werden (siehe Type Casting), bevor sie weiterverarbeitet werden können — etwa eine eingegebene Zahl, die zunächst als String vorliegt. Robuste Programme validieren Nutzereingaben, bevor sie sie verwenden, um auf unerwartete oder fehlerhafte Eingaben nicht mit einem Absturz zu reagieren (siehe Exceptions).
Im Detail
Die goldene Regel der Softwareentwicklung lautet: “Nutzereingaben sind grundsätzlich nicht vertrauenswürdig.” Egal wonach ein Programm fragt — ein Mensch kann etwas völlig anderes eingeben als erwartet, absichtlich oder aus Versehen. Ein simples Beispiel:
eingabe = input("Gib dein Alter ein: ")
alter = int(eingabe) # Absturz, wenn eingabe z.B. "zwölf" oder leer ist!Robuster ist eine Kombination aus Validierung und Fehlerbehandlung:
eingabe = input("Gib dein Alter ein: ")
try:
alter = int(eingabe)
if alter < 0 or alter > 150:
print("Das ist kein plausibles Alter.")
else:
verarbeite(alter)
except ValueError:
print("Bitte eine Zahl eingeben.")Diese Vorsicht ist keine Übertreibung — ein großer Teil aller Sicherheitslücken in Software entsteht dadurch, dass Eingaben ungeprüft weiterverwendet werden (klassisches Beispiel: SQL-Injection, bei der eine Eingabe direkt in eine Datenbankabfrage eingesetzt wird, siehe SQLi). Deshalb unterscheidet man zwischen Syntaxprüfung (ist die Eingabe überhaupt in der erwarteten Form, z. B. eine gültige Zahl oder E-Mail-Adresse) und Semantikprüfung (ist der Wert inhaltlich plausibel, z. B. ein Alter zwischen 0 und 150).
Je nach Kontext unterscheidet sich, WIE Eingaben ankommen: über die Kommandozeile/Konsole (einfachster Fall, meist reiner Text), über grafische Formularfelder (oft schon mit clientseitiger Vorvalidierung, die aber niemals die serverseitige Prüfung ersetzen darf), oder über Dateien/APIs (strukturierte Formate wie JSON, die zwar Typinformation mitbringen, aber trotzdem inhaltlich falsch oder böswillig sein können). Die Grundregel — niemals blind vertrauen, immer validieren, bevor verarbeitet wird — gilt in allen Fällen gleich.
Siehe auch: Type Casting, Exceptions