Eingabe-Schwachstellen
Häufige Risiken bei Zeichenketteingaben
Pufferüberlauf
Ein Pufferüberlauf tritt auf, wenn die Eingabe die vordefinierte Puffergröße überschreitet, was potenziell zu Systemabstürzen oder Sicherheitsverletzungen führen kann.
char buffer[10];
scanf("%s", buffer); // Gefährlich: Keine Längenbeschränkung
Beispiel für eine Schwachstelle
void unsafeInput() {
char name[10];
printf("Geben Sie Ihren Namen ein: ");
gets(name); // NIE gets() verwenden - extrem gefährlich!
}
Arten von Eingabe-Schwachstellen
Schwachstellentyp |
Beschreibung |
Risiko |
Pufferüberlauf |
Überschreitung des zugewiesenen Speichers |
Hoch |
Format-String-Angriff |
Manipulation von Format-Spezifizierern |
Kritisch |
Unbegrenzte Eingabe |
Keine Überprüfung der Eingabelänge |
Hoch |
Mögliche Folgen
graph TD
A[Unsichere Eingabe] --> B[Pufferüberlauf]
B --> C[Speicherkorruption]
C --> D[Sicherheitsschwachstellen]
D --> E[Potenzielle Systemkompromittierung]
Risiken in der Praxis
Stack-Smashing
Angreifer können Speicherplätze überschreiben, indem sie übermäßige Eingaben liefern, was potenziell die Ausführung von bösartigem Code ermöglicht.
Speicherkorruption
Unkontrollierte Eingaben können:
- benachbarte Speicherbereiche überschreiben
- den Ausführungsfluss des Programms ändern
- Sicherheitsschwachstellen erzeugen
Demonstration der Schwachstelle
#include <stdio.h>
#include <string.h>
void vulnerableFunction() {
char buffer[16];
printf("Geben Sie Daten ein: ");
gets(buffer); // Gefährliche Funktion
}
LabEx Sicherheitsrichtlinie
Bei der Arbeit mit Zeichenketteingaben in C:
- Immer die Eingabelänge validieren
- Sichere Eingabefunktionen verwenden
- Grenzprüfungen implementieren
fgets()
anstelle von gets()
bevorzugen
Sichere Eingabepraktiken
void safeInput() {
char buffer[50];
// Eingabelänge auf Puffergröße begrenzen
fgets(buffer, sizeof(buffer), stdin);
// Zeilenumbruchzeichen entfernen
buffer[strcspn(buffer, "\n")] = 0;
}
Wichtige Punkte
- Die Eingabevalidierung ist entscheidend
- Benutzerdaten niemals vertrauen
- Sichere Eingabefunktionen verwenden
- Strenge Grenzprüfungen implementieren