Fonctionnalités de sécurité dans le CRTSecurity Features in the CRT

De nombreuses anciennes fonctions CRT ont de nouvelles versions plus sécurisées.Many old CRT functions have newer, more secure versions. Si une fonction sécurisée existe, l'ancienne version moins sécurisée est marquée comme déconseillée et la nouvelle version a le suffixe _s ("sécurisé").If a secure function exists, the older, less secure version is marked as deprecated and the new version has the _s ("secure") suffix.

Dans ce contexte, le terme "déconseillé" signifie simplement que l'utilisation d'une fonction n'est pas recommandée ; il n'indique pas que la fonction est programmée pour être supprimée du CRT.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.

Les fonctions sécurisées n'empêchent pas ni ne corrigent les erreurs de sécurité ; en revanche, elles interceptent les erreurs lorsqu'elles se produisent.The secure functions do not prevent or correct security errors; rather, they catch errors when they occur. Elles effectuent des contrôles supplémentaires pour les conditions d'erreur et, en cas d'erreur, elles appellent un gestionnaire d'erreurs (consultez Validation de paramètres).They perform additional checks for error conditions, and in the case of an error, they invoke an error handler (see Parameter Validation).

Par exemple, la fonction strcpy n'a aucun moyen de déterminer si la chaîne qu'elle copie est trop volumineuse pour sa mémoire tampon de destination.For example, the strcpy function has no way of telling if the string that it is copying is too big for its destination buffer. Toutefois, sa fonction sécurisée équivalente, strcpy_s, prend la taille de la mémoire tampon comme paramètre, ce qui lui permet de déterminer si un dépassement de mémoire tampon se produit.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. Si vous utilisez la fonction strcpy_s pour copier onze caractères dans une mémoire tampon de dix caractères, il s'agit d'une erreur de votre part. La fonction strcpy_s ne peut pas corriger votre erreur, mais elle peut la détecter et vous en informer en appelant le gestionnaire de paramètre non valide.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.

Suppression des avertissements de désapprobationEliminating deprecation warnings

Il existe plusieurs façons de supprimer les avertissements de désapprobation pour les anciennes fonctions moins sécurisées.There are several ways to eliminate deprecation warnings for the older, less secure functions. La méthode la plus simple est de définir _CRT_SECURE_NO_WARNINGS ou d'utiliser le pragma warning.The simplest is simply to define _CRT_SECURE_NO_WARNINGS or use the warning pragma. Les deux options désactivent les avertissements de désapprobation, mais bien évidemment, les problèmes de sécurité à l'origine des avertissements existent toujours.Either will disable deprecation warnings, but of course the security issues that caused the warnings still exist. Il est préférable de laisser les avertissements de désapprobation activés et de tirer parti des nouvelles fonctionnalités de sécurité CRT.It is far better to leave deprecation warnings enabled and take advantage of the new CRT security features.

En C++, la méthode la plus simple est d'utiliser Sécuriser les surcharges de modèle, qui dans de nombreux cas supprime les avertissements de désapprobation en remplaçant les appels aux fonctions déconseillées par des appels aux nouvelles versions sécurisées de ces fonctions.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. Par exemple, prenez l'appel déconseillé à strcpy :For example, consider this deprecated call to strcpy:

char szBuf[10];
strcpy(szBuf, "test"); // warning: deprecated

L'affectation de la valeur 1 à _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES supprime l'avertissement en modifiant l'appel strcpy à strcpy_s, ce qui empêche les dépassements de mémoire tampon.Defining _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES as 1 eliminates the warning by changing the strcpy call to strcpy_s, which prevents buffer overruns. Pour plus d'informations, consultez Secure Template Overloads.For more information, see Secure Template Overloads.

Pour les fonctions déconseillées sans surcharges de modèle sécurisées, vous devez envisager de mettre à jour manuellement votre code pour utiliser les versions sécurisées.For those deprecated functions without secure template overloads, you should definitely consider manually updating your code to use the secure versions.

Une autre source d'avertissements de désapprobation, sans rapport avec la sécurité, sont les fonctions POSIX.Another source of deprecation warnings, unrelated to security, is the POSIX functions. Remplacez les noms de fonction POSIX par leurs équivalents standard (par exemple, remplacez access par _access), ou désactivez les avertissements de désapprobation POSIX en définissant _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. Pour plus d'informations, voir Compatibilité.For more information, see Compatibility.

Fonctionnalités de sécurité supplémentairesAdditional Security Features

Voici quelques-unes des fonctions de sécurité :Some of the security features include the following:

  • Parameter Validation.Parameter Validation. Les paramètres passés aux fonctions CRT sont validés, dans les fonctions sécurisées et dans de nombreuses versions préexistantes de ces fonctions.Parameters passed to CRT functions are validated, in both secure functions and in many preexisting versions of functions. Ces validations sont :These validations include:

    • Vérifier les valeurs NULL passées aux fonctions.Checking for NULL values passed to the functions.

    • Vérifier la validité des valeurs énumérées.Checking enumerated values for validity.

    • Vérifier que les valeurs intégrales sont comprises dans des plages valides.Checking that integral values are in valid ranges.

  • Pour plus d’informations, consultez Validation de paramètre.For more information, see Parameter Validation.

  • Un gestionnaire de paramètres non valides est également accessible au développeur.A handler for invalid parameters is also accessible to the developer. Lorsqu'un paramètre non valide est détecté, au lieu de déclarer et de quitter l'application, le CRT fournit un moyen de vérifier ces problèmes avec la fonction _set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler.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. Les fonctions sécurisées requièrent que la taille de la mémoire tampon soit passée à une fonction qui écrit dans une mémoire tampon.The secure functions require that the buffer size be passed to any function that writes to a buffer. Les versions sécurisées valident que la mémoire tampon est assez large avant d'y écrire, ce qui permet d'éviter de graves erreurs de dépassement de mémoire tampon qui peuvent autoriser l'exécution de code malveillant.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. Ces fonctions retournent généralement le type de code d'erreur errno et appellent le gestionnaire de paramètre non valide si la taille de la mémoire tampon est trop petite.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. Les fonctions qui lisent les mémoires tampons d'entrée, telles que gets, ont des versions sécurisées qui nécessitent que vous spécifiez une taille maximale.Functions that read from input buffers, such as gets, have secure versions that require you to specify a maximum size.

  • Null termination.Null termination. Certaines fonctions qui laissent des chaines potentiellement non terminées ont des versions sécurisées qui garantissent que ces chaînes se terminent correctement par null.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. Les fonctions sécurisées retournent des codes d'erreur contenant plus d'informations sur les erreurs que dans les fonctions préexistantes.The secure functions return error codes with more error information than was available with the preexisting functions. Les fonctions sécurisées et de nombreuses fonctions préexistantes définissent désormais errno et retournent souvent le type de code errno, pour fournir un meilleur rapport d'erreurs.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. Les API d'E/S de fichier sécurisées prennent en charge par défaut l'accès sécurisé aux fichiers.Secure file I/O APIs support secure file access in the default case.

  • Windows security.Windows security. Les API de traitement sécurisées appliquent des stratégies de sécurité et permettent de spécifier les listes de contrôle d'accès.Secure process APIs enforce security policies and allow ACLs to be specified.

  • Format string syntax checking.Format string syntax checking. Les chaînes non valides sont détectées, par exemple, en utilisant des caractères de champ de type incorrect dans les chaines de format printf.Invalid strings are detected, for example, using incorrect type field characters in printf format strings.

Voir aussiSee also

Validation de paramètreParameter Validation
Sécuriser les surcharges de modèleSecure Template Overloads
Fonctionnalités de bibliothèque CRTCRT Library Features