Sicherheitsfunktionen in der CRTSecurity Features in the CRT

Viele alte CRT-Funktionen liegen in neueren, sichereren Versionen vor.Many old CRT functions have newer, more secure versions. Wenn eine sichere Funktion vorhanden ist, wird die ältere, weniger sichere Version als veraltet markiert, und die neue Version hat das _s-Suffix („sicher“).If a secure function exists, the older, less secure version is marked as deprecated and the new version has the _s ("secure") suffix.

In diesem Kontext bedeutet „veraltet“ lediglich, dass die Verwendung einer Funktion nicht empfohlen wird; es gibt nicht an, dass geplant ist, die Funktion aus der CRT zu entfernen.In this context, "deprecated" just means that a function's use is not recommended; it does not indicate that the function is scheduled to be removed from the CRT.

Sichere Funktionen verhindern weder Sicherheitsfehler, noch korrigieren sie sie; vielmehr fangen sie Fehler beim Auftreten ab.The secure functions do not prevent or correct security errors; rather, they catch errors when they occur. Sie führen zusätzliche Überprüfungen auf Fehlerbedingungen durch und rufen im Falle eines Fehlers einen Fehlerhandler auf (siehe Parametervalidierung).They perform additional checks for error conditions, and in the case of an error, they invoke an error handler (see Parameter Validation).

Die strcpy-Funktion kann z.B. nicht mitteilen, ob die Zeichenfolge, die sie kopiert, zu groß für den Zielpuffer ist.For example, the strcpy function has no way of telling if the string that it is copying is too big for its destination buffer. Ihr sicheres Gegenstück strcpy_s übernimmt allerdings die Größe des Puffers als Parameter, damit sie bestimmen kann, wann ein Pufferüberlauf erfolgt.However, its secure counterpart, strcpy_s, takes the size of the buffer as a parameter, so it can determine if a buffer overrun will occur. Wenn Sie strcpy_s verwenden, um elf Zeichen in einen Zehnzeichenpuffer zu kopieren, liegt der Fehler bei Ihnen; strcpy_s kann Ihren Fehler nicht beheben, jedoch erkennen und Sie durch Aufrufen des Handlers für ungültige Parameter informieren.If you use strcpy_s to copy eleven characters into a ten-character buffer, that is an error on your part; strcpy_s cannot correct your mistake, but it can detect your error and inform you by invoking the invalid parameter handler.

Beseitigen von AblaufwarnungenEliminating deprecation warnings

Es gibt mehrere Möglichkeiten, um Ablaufwarnungen für die älteren, weniger sicheren Funktionen zu beseitigen.There are several ways to eliminate deprecation warnings for the older, less secure functions. Die einfachste Möglichkeit ist, _CRT_SECURE_NO_WARNINGS zu definieren oder das warning-Pragma zu verwenden.The simplest is simply to define _CRT_SECURE_NO_WARNINGS or use the warning pragma. Jede deaktiviert Ablaufwarnungen, aber die Sicherheitsprobleme, die die Warnung verursacht haben, sind natürlich noch vorhanden.Either will disable deprecation warnings, but of course the security issues that caused the warnings still exist. Es ist wesentlich besser, Ablaufwarnungen aktiviert zu lassen und die neuen CRT-Sicherheitsfunktionen zu nutzen.It is far better to leave deprecation warnings enabled and take advantage of the new CRT security features.

In C++ erfolgt dies am einfachsten mit der Verwendung von sicheren Vorlagenüberladungen, die in vielen Fällen Ablaufwarnungen durch den Ersatz der Aufrufe veralteter Funktionen durch Aufrufe neuer, sicherer Versionen dieser Funktionen beseitigen.In C++, the easiest way to do that is to use Secure Template Overloads, which in many cases will eliminate deprecation warnings by replacing calls to deprecated functions with calls to the new secure versions of those functions. Ein Beispiel ist dieser veraltete Aufruf von strcpy:For example, consider this deprecated call to 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.Defining _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES as 1 eliminates the warning by changing the strcpy call to strcpy_s, which prevents buffer overruns. Weitere Informationen finden Sie unter Secure Template Overloads.For more information, see 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.For those deprecated functions without secure template overloads, you should definitely consider manually updating your code to use the secure versions.

Eine andere Quelle von Ablaufwarnungen, unabhängig von der Sicherheit, sind POSIX-Funktionen.Another source of deprecation warnings, unrelated to security, is the POSIX functions. Ersetzen Sie POSIX-Funktionsnamen durch Ihre Standardentsprechungen (ändern Sie z.B. access in _access), oder deaktivieren Sie POSIX-bezogene Ablaufwarnungen durch Definieren von _CRT_NONSTDC_NO_WARNINGS.Replace POSIX function names with their standard equivalents (for example, change access to _access), or disable POSIX-related deprecation warnings by defining _CRT_NONSTDC_NO_WARNINGS. Weitere Informationen finden Sie unter Kompatibilität.For more information, see Compatibility.

Zusätzliche SicherheitsfunktionenAdditional Security Features

Zu den wichtigsten Sicherheitsfunktionen zählen Folgende:Some of the security features include the following:

  • Parameter Validation.Parameter Validation. An CRT-Funktionen übergebene Parameter werden sowohl in sicheren Funktionen als auch in vielen bereits vorhandenen Versionen der Funktionen überprüft.Parameters passed to CRT functions are validated, in both secure functions and in many preexisting versions of functions. Diese Überprüfungen umfassen:These validations include:

    • Überprüfung auf NULL-Werte, die den Funktionen übergeben werden.Checking for NULL values passed to the functions.

    • Überprüfung von Enumerationswerten auf Gültigkeit.Checking enumerated values for validity.

    • Überprüfen, ob ganzzahlige Werte im gültigen Bereiche liegen.Checking that integral values are in valid ranges.

  • Weitere Informationen finden Sie unter Parametervalidierung.For more information, see Parameter Validation.

  • Auf einen Handler für ungültige Parameter kann auch der Entwickler zugreifen.A handler for invalid parameters is also accessible to the developer. Wenn ein ungültiger Parameter festgestellt wird, bietet die CRT eine Möglichkeit, diese Probleme mit der _set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler-Funktion zu überprüfen, anstatt dies zu bestätigen und die Anwendung zu beenden.When an encountering an invalid parameter, instead of asserting and exiting the application, the CRT provides a way to check these problems with the _set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler function.

  • Sized Buffers.Sized Buffers. Die sicheren Funktionen erfordern, dass die Größe des Puffers an alle Funktionen übergeben wird, die in einen Puffer schreiben.The secure functions require that the buffer size be passed to any function that writes to a buffer. Die sicheren Versionen überprüfen, ob der Puffer groß genug ist, bevor sie darin schreiben, um gefährliche Pufferüberlauffehler zu vermeiden, die die Ausführung bösartigen Codes zulassen könnten.The secure versions validate that the buffer is large enough before writing to it, helping to avoid dangerous buffer overrun errors that could allow malicious code to execute. Diese Funktionen geben in der Regel einen Fehlercode des Typs errno zurück und rufen den Handler für ungültige Parameter auf, wenn der Puffer zu klein ist.These functions usually return an errno type of error code and invoke the invalid parameter handler if the size of the buffer is too small. Funktionen, die wie gets aus Eingabepuffern lesen, haben sichere Versionen, die von Ihnen die Angabe einer maximalen Größe fordern.Functions that read from input buffers, such as gets, have secure versions that require you to specify a maximum size.

  • Null termination.Null termination. Einige Funktionen, die potenziell nicht beendete Zeichenfolgen hinterlassen haben, haben sichere Versionen, die sicherstellen, dass Zeichenfolgen ordnungsgemäß mit NULL enden.Some functions that left potentially non-terminated strings have secure versions which ensure that strings are properly null-terminated.

  • Enhanced error reporting.Enhanced error reporting. Die sicheren Funktionen geben Fehlercodes mit mehr Fehlerinformationen zurück, als bei den bereits vorhandenen Funktionen verfügbar waren.The secure functions return error codes with more error information than was available with the preexisting functions. Die sicheren Funktionen und viele der bereits vorhandenen Funktionen legen jetzt errno fest und geben häufig ebenfalls einen errno-Codetyp zurück, um eine bessere Fehlerberichterstattung zu bieten.The secure functions and many of the preexisting functions now set errno and often return an errno code type as well, to provide better error reporting.

  • Filesystem security.Filesystem security. Sichere Datei-E/A-APIs unterstützen sicheren Dateizugriff im Standardfall.Secure file I/O APIs support secure file access in the default case.

  • Windows security.Windows security. Sichere Prozess-APIs setzen Sicherheitsrichtlinien durch und lassen die Angabe von ACLs zu.Secure process APIs enforce security policies and allow ACLs to be specified.

  • Format string syntax checking.Format string syntax checking. Ungültige Zeichenfolgen werden erkannt, z.B. Verwendung falscher Typfeldzeichen in printf-Formatzeichenfolgen.Invalid strings are detected, for example, using incorrect type field characters in printf format strings.

Siehe auchSee also

ParametervalidierungParameter Validation
Sichere VorlagenüberladungenSecure Template Overloads
CRT-BibliotheksfunktionenCRT Library Features