Methoden zur Eingabebereinigung
Grundlegende Konzepte der Eingabebereinigung
Die Eingabebereinigung ist eine entscheidende Sicherheitstechnik, um schädliche Eingaben daran zu hindern, die Integrität und Funktionalität des Systems zu beeinträchtigen.
Kerntechniken der Bereinigung
1. Zeichenfilterung
void sanitize_input(char *input) {
for (int i = 0; input[i] != '\0'; i++) {
if (!isalnum(input[i]) && input[i] != ' ') {
input[i] = '_'; // Ungültige Zeichen ersetzen
}
}
}
2. Whitelist-Validierung
int is_valid_input(const char *input) {
const char *allowed = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ";
return strspn(input, allowed) == strlen(input);
}
Bereinigungsstrategien
Strategie |
Beschreibung |
Anwendungsfall |
Zeichenfilterung |
Entfernen/Ersetzen ungültiger Zeichen |
Validierung von Benutzereingaben |
Längenbeschränkung |
Kürzen der Eingabe auf maximale Länge |
Vermeidung von Pufferüberläufen |
Typkonvertierung |
Konvertieren der Eingabe in den erwarteten Typ |
Validierung numerischer Eingaben |
Entkommen von Sonderzeichen |
Neutralisieren potenzieller Injektionsrisiken |
SQL-, Shell-Befehle |
Ablauf der Eingabeverarbeitung
flowchart TD
A[Rohdaten der Benutzereingabe] --> B{Längenvalidierung}
B -->|Zu lang| C[Kürzen]
B -->|Gültige Länge| D{Zeichenfilter}
D --> E{Whitelist-Prüfung}
E -->|Erfolgreich| F[Sichere Verarbeitung]
E -->|Nicht erfolgreich| G[Eingabe ablehnen]
Erweiterte Bereinigungsmethoden
Validierung mit regulären Ausdrücken
int validate_email(const char *email) {
regex_t regex;
int reti = regcomp(®ex, "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$", REG_EXTENDED);
reti = regexec(®ex, email, 0, NULL, 0);
regfree(®ex);
return reti == 0;
}
Bereinigung numerischer Eingaben
int sanitize_numeric_input(const char *input, int *result) {
char *endptr;
long value = strtol(input, &endptr, 10);
if (endptr == input || *endptr != '\0') {
return 0; // Ungültige Eingabe
}
*result = (int)value;
return 1;
}
Sicherheitsüberlegungen
- Vertrauen Sie niemals Benutzereingaben.
- Validieren und bereinigen Sie immer Eingaben.
- Verwenden Sie mehrere Validierungsebenen.
- Implementieren Sie kontextspezifische Bereinigungen.
Leistung und Effizienz
- Minimieren Sie die Verarbeitungslast.
- Verwenden Sie effiziente Validierungsalgorithmen.
- Legen Sie ungültige Eingaben frühzeitig ab.
LabEx betont die entscheidende Rolle einer umfassenden Eingabebereinigung bei der Entwicklung sicherer und robuster C-Anwendungen.