Sichere C-Bibliothek
Nach oben zu Referenz zur C-Laufzeitbibliothek
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.
Der Stil der Programmierung, den die sichere C-Bibliothek fördert, führt zu sicherem und weniger fehlerhaftem Code.
Inhaltsverzeichnis
Beispiel
int main(){
char corpName[10];
printf ("Enter your corporation name: ");
gets(name);
printf ("Your corporation name is: %s", corpName);
return 0;
}
Wenn der Benutzer einen Namen eingibt, 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
- fprintf_s, fwprintf_s
- fscanf_s, fwscanf_s
- printf_s, wprintf_s
- scanf_s, wscanf_s
- snprintf_s, snwprintf_s
- sprintf_s, swprintf_s
- sscanf_s, swscanf_s
- vfprintf_s, vfwprintf_s
- vfscanf_s, vfwscanf_s
- vprintf_s, vwprintf_s
- vscanf_s, vwscanf_s
- vsnprintf_s, vsnwprintf_s
- vsprintf_s, vswprintf_s
- vsscanf_s, vswscanf_s