Eingabevalidierung
Verständnis der Eingabevalidierung
Die Eingabevalidierung ist ein kritischer Sicherheitsmechanismus, der sicherstellt, dass benutzergelieferte Daten bestimmten Kriterien entsprechen, bevor sie verarbeitet werden. Im LabEx-Programmierumfeld verhindert eine korrekte Eingabevalidierung potenzielle Sicherheitslücken und Systemfehler.
Validierungsstrategien
graph TD
A[Eingabevalidierung] --> B[Längenprüfung]
A --> C[Typüberprüfung]
A --> D[Bereichsvalidierung]
A --> E[Musterabgleich]
Validierungstechniken
1. Längenvalidierung
#include <string.h>
#define MAX_BENUTZERNAME_LÄNGE 20
#define MIN_BENUTZERNAME_LÄNGE 3
int validate_username_length(const char* username) {
size_t len = strlen(username);
return (len >= MIN_BENUTZERNAME_LÄNGE && len <= MAX_BENUTZERNAME_LÄNGE);
}
2. Typüberprüfung
int validate_numeric_input(const char* input) {
while (*input) {
if (!isdigit(*input)) {
return 0; // Ungültige Eingabe
}
input++;
}
return 1; // Gültige numerische Eingabe
}
3. Bereichsvalidierung
int validate_age(int age) {
return (age >= 0 && age <= 120);
}
Eingabevalidierungsmuster
Validierungstyp |
Beschreibung |
Beispiel |
Längenprüfung |
Sicherstellung, dass die Eingabe innerhalb der angegebenen Grenzen liegt |
Benutzername 3-20 Zeichen |
Typüberprüfung |
Bestätigung, dass die Eingabe dem erwarteten Typ entspricht |
Numerisch, alphabetisch |
Bereichsvalidierung |
Validierung numerischer Bereiche |
Alter zwischen 0-120 |
Musterabgleich |
Überprüfung anhand spezifischer Formate |
E-Mail, Telefonnummer |
Beispiel für eine umfassende Validierung
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef struct {
char username[21];
int age;
char email[50];
} UserData;
int validate_username(const char* username) {
size_t len = strlen(username);
return (len >= 3 && len <= 20);
}
int validate_age(int age) {
return (age >= 0 && age <= 120);
}
int validate_email(const char* email) {
// Einfache E-Mail-Validierung
return (strchr(email, '@') != NULL && strchr(email, '.') != NULL);
}
UserData* create_user(const char* username, int age, const char* email) {
if (!validate_username(username)) {
fprintf(stderr, "Ungültiger Benutzername\n");
return NULL;
}
if (!validate_age(age)) {
fprintf(stderr, "Ungültiges Alter\n");
return NULL;
}
if (!validate_email(email)) {
fprintf(stderr, "Ungültige E-Mail-Adresse\n");
return NULL;
}
UserData* user = malloc(sizeof(UserData));
if (user == NULL) {
fprintf(stderr, "Speicherallokation fehlgeschlagen\n");
return NULL;
}
strncpy(user->username, username, sizeof(user->username) - 1);
user->age = age;
strncpy(user->email, email, sizeof(user->email) - 1);
return user;
}
int main() {
UserData* valid_user = create_user("john_doe", 30, "[email protected]");
UserData* invalid_user = create_user("ab", 150, "invalid_email");
free(valid_user);
return 0;
}
Best Practices
- Validieren Sie immer Benutzereingaben.
- Verwenden Sie strenge Validierungsregeln.
- Geben Sie klare Fehlermeldungen aus.
- Implementieren Sie mehrere Validierungsebenen.
- Vertrauen Sie niemals Benutzereingaben.
Durch die Beherrschung von Eingabevalidierungstechniken können Entwickler die Sicherheit und Zuverlässigkeit ihrer Anwendungen im LabEx-Lernumfeld deutlich verbessern.