Sichere C-Bibliothek

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Referenz zur C-Laufzeitbibliothek - Index


Die wichtigste Grund für die Entwicklung der sicheren C-Bibliothek war die Notwendigkeit einer Bereichsprüfung für Funktionen zur String-Verarbeitung in der C-Bibliothek. Es gibt viele Funktionen in der C-Bibliothek, die erwarten, dass die aufrufende Routine String-Parameter bereitstellt, die lang genug sind, um das Ergebnis der Operationen aufzunehmen. Wenn ein längerer String "über" einen kürzeren geschrieben wird, werden die Daten über das Ende hinaus geschrieben und überschreiben somit andere Programmdaten. Dies kann zu "geheimnisvollen" Fehlern führen, da das Programm keine Möglichkeit hat, festzustellen, ob oder wann etwas schief gegangen ist.

Eine typische Lösung stellte die Verwendung von Strings dar, die "groß genug" waren, aber dies konnte zu zwei Problemen führen: entweder führte dies zu einer unnötigen Platzverschwendung, oder "groß genug" reichte in der Praxis doch nicht aus. Darüber hinaus können Pufferüberläufe zur Ausführung von schädlichem Code missbraucht werden, der die Sicherheit von Betriebssystemen und Netzwerken beeinträchtigt.

Für viele Funktionen der C-Laufzeitbibliothek stellt die sichere C-Bibliothek zusätzliche Parameter für die Bereichsprüfung von Zeichen-Arrays zur Verfügung. Daten werden so niemals über das Ende eines Arrays hinaus geschrieben. Außerdem führt sie Laufzeiteinschränkungen ein, und bietet Benutzern die Möglichkeit, eigene Behandlungsfunktionen für Laufzeitverletzungen festzulegen. Auf diese Weise "weiß" das Programm, wann und wo etwas mit einem Zeichen-Array schief läuft, und kann den Fehler beheben oder mit einer Fehlertoleranz weiterarbeiten.

Hinweis: Die Sichere C-Bibliothek wird auf Mac OS X-Anwendungen nicht unterstützt.

Der Stil der Programmierung, den die sichere C-Bibliothek fördert, führt zu sicherem und weniger fehlerhaftem Code.

Beispiel

int main(){ 
    char corpName[10]; 
    printf ("Enter your corporation name:  "); 
    gets(name); 
    printf ("Your corporation name is: %s", corpName); 
    return 0; 
}

Gibt der Client einen Namen ein, der länger als 9 Zeichen ist, kann dies zu Stack- und Datenbeschädigungen führen. Durch Ändern von gets(name); in gets_s(name,10) wird dieses Problem behoben. Wie viele Zeichen der Benutzer auch eingibt, es werden immer nur die ersten 9 Zeichen in dem Zeichen-Array corpName gespeichert.

stdio.h

Routinen für die Eingabe/Ausgabe

Funktionen für den Dateizugriff

Funktionen für die formatierte Eingabe/Ausgabe

Funktionen für die Zeicheneingabe/-ausgabe

stdlib.h

Behandlung von Laufzeiteinschränkungen

Kommunikation mit der Umgebung

Suchen und Sortieren

string.h

Funktionen zum Kopieren

Funktionen für die Verkettung

Funktionen zum Suchen

Sonstige Funktionen

time.h

Funktionen für die Zeitkonvertierung