Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Viele alte CRT-Funktionen liegen in neueren, sichereren Versionen vor. Wenn eine sichere Funktion vorhanden ist, wird die ältere, weniger sichere Version als veraltet markiert. Die neue Version hat das _s
Suffix ("secure") .
In diesem Zusammenhang bedeutet "veraltet", dass die Verwendung der Funktion nicht empfohlen wird. Es bedeutet nicht, dass die Funktion aus dem CRT entfernt wird.
Die sicheren Funktionen verhindern oder beheben keine Sicherheitsfehler. Stattdessen erfassen sie Fehler, wenn sie auftreten. Sie führen zusätzliche Überprüfungen auf Fehlerbedingungen durch. Wenn ein Fehler auftritt, rufen sie einen Fehlerhandler auf (siehe Parameterüberprüfung).
Die Funktion kann z. B. nicht feststellen, strcpy
ob die kopierte Zeichenfolge zu groß für den Zielpuffer ist. Das sichere Gegenstück strcpy_s
nimmt die Größe des Puffers als Parameter an. Sie kann also ermitteln, ob ein Pufferüberlauf auftritt. Wenn Sie strcpy_s
verwenden, um 11 Zeichen in einen 10-Zeichen-Puffer zu kopieren, ist das ein Fehler ihrerseits; strcpy_s
kann diesen Fehler nicht korrigieren. Es kann jedoch Ihren Fehler erkennen und Sie durch Aufrufen des ungültigen Parameterhandlers informieren.
Beseitigen von Ablaufwarnungen
Es gibt mehrere Möglichkeiten, um Veraltungswarnungen für die älteren, weniger sicheren Funktionen zu beseitigen. Am einfachsten ist es, _CRT_SECURE_NO_WARNINGS
zu definieren oder das warning
-Pragma zu verwenden. Jede deaktiviert Ablaufwarnungen, aber die Sicherheitsprobleme, die die Warnung verursacht haben, sind noch vorhanden. Es ist wesentlich besser, Ablaufwarnungen aktiviert zu lassen und die neuen CRT-Sicherheitsfunktionen zu nutzen.
In C++ besteht die einfachste Möglichkeit, die Veraltetkeitswarnungen zu beseitigen, darin, Sichere Vorlagenüberladungen zu verwenden. Die Überladungen beseitigen in vielen Fällen Veralterungswarnungen. Sie ersetzen Aufrufe veralteter Funktionen durch Aufrufe sicherer Versionen der Funktionen. Ein Beispiel ist dieser veraltete Aufruf von strcpy
:
char szBuf[10];
strcpy(szBuf, "test"); // warning: deprecated
Durch Definieren von _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
als 1 wird die Warnung beseitigt, indem der strcpy
-Aufruf in strcpy_s
geändert wird, was Pufferüberläufe verhindert. Weitere Informationen finden Sie unter Secure Template Overloads.
Für diese veralteten Funktionen ohne sichere Vorlagenüberladungen sollten Sie definitiv erwägen, den Code manuell zu aktualisieren, um die sicheren Versionen zu verwenden.
Eine andere Quelle von Ablaufwarnungen, unabhängig von der Sicherheit, sind POSIX-Funktionen. Ersetzen Sie POSIX-Funktionsnamen durch ihre Standardentsprechungen (z. B. indem Sie access
in _access
ändern), oder deaktivieren Sie POSIX-bezogene Deprecation-Warnungen durch das Definieren von _CRT_NONSTDC_NO_WARNINGS
. Weitere Informationen finden Sie unter Kompatibilität.
Weitere Sicherheitsfeatures
Einige der Sicherheitsfeatures umfassen:
Parameterüberprüfung
Sichere Funktionen und viele ihrer unsicheren Entsprechungen überprüfen Parameter. Die Überprüfung kann Folgendes umfassen:
- Überprüfung der
NULL
Werte. - Überprüfung von Enumerationswerten auf Gültigkeit.
- Überprüfen, ob ganzzahlige Werte im gültigen Bereich liegen.
Weitere Informationen finden Sie unter Parameterüberprüfung.
Auf einen Handler für ungültige Parameter kann auch der Entwickler zugreifen. Wenn eine Funktion auf einen ungültigen Parameter trifft, anstatt die Anwendung zu beenden und einen Abbruch durchzuführen, können Sie mit dem CRT diese Probleme über
_set_invalid_parameter_handler
oder_set_thread_local_invalid_parameter_handler
überprüfen.- Überprüfung der
Angepasste Puffer
Sie müssen die Puffergröße an jede sichere Funktion übergeben, die in einen Puffer schreibt. Die sicheren Versionen überprüfen, ob der Puffer groß genug ist, bevor in ihn geschrieben wird. Die Überprüfung trägt dazu bei, gefährliche Pufferüberlauffehler zu vermeiden, die das Ausführen von bösartigem Code ermöglichen könnten. Diese Funktionen geben in der Regel einen
errno
Fehlercode zurück und rufen den ungültigen Parameterhandler auf, wenn die Größe des Puffers zu klein ist. Funktionen, die wiegets
aus Eingabepuffern lesen, haben sichere Versionen, die von Ihnen die Angabe einer maximalen Größe fordern.Die Debugversionen einiger sicherheitsgeweiterter CRT-Funktionen füllen den an sie übergebenen Puffer mit einem Sonderzeichen (0xFE). Dieses Füllzeichen hilft dabei, Fälle zu finden, in denen die falsche Größe an die Funktion übergeben wurde. Leider reduziert es auch die Leistung. Verwenden Sie
_CrtSetDebugFillThreshold
, um die Pufferfüllung zu deaktivieren und die Leistung zu verbessern. Weitere Informationen und eine Liste der Funktionen, die dieses Verhalten aufweisen, finden Sie unter_CrtSetDebugFillThreshold
.Null-Beendigung
Einige Funktionen, die möglicherweise nicht nullterminierte Zeichenfolgen hinterlassen, haben sichere Versionen, die sicherstellen, dass Zeichenfolgen ordnungsgemäß nullterminiert sind.
Erweiterte Fehlerberichterstattung
Die sicheren Funktionen geben Fehlercodes mit mehr Fehlerinformationen zurück, als bei den bereits vorhandenen Funktionen verfügbar waren. Die sicheren Funktionen und viele der bereits vorhandenen Funktionen legen jetzt
errno
fest und geben häufig ebenfalls einenerrno
-Codetyp zurück, um eine bessere Fehlerberichterstattung zu bieten.Dateisystemsicherheit
Sichere Datei-E/A-APIs unterstützen sicheren Dateizugriff im Standardfall.
Windows-Sicherheit
Sichere Prozess-APIs setzen Sicherheitsrichtlinien durch und lassen die Angabe von ACLs zu.
Formatieren der Zeichenfolgensyntax-Überprüfung
Ungültige Zeichenfolgen werden erkannt, z. B. wenn Sie falsche Typfeldzeichen in
printf
Formatzeichenfolgen verwenden.
Siehe auch
Parameterüberprüfung
Sichere Vorlagenüberladungen
CRT-Dateien (C-Laufzeit) und LIB-Dateien (C++-Standardbibliothek, STL-Dateien) .lib
-Dateien