Fonctionnalités de sécurité du CRT

De nombreuses fonctions anciennes CRT ont plus récent, plus les versions sécurisées.Si une fonction sécurisée existe, la version plus ancienne et moins sécurisée est marquée comme obsolète et la nouvelle version a suffixe d' _s (« sécurisée »).

Dans ce contexte, « a déconseillé » signifie simplement que l'utilisation d'une fonction n'est pas recommandée ; il n'indique pas que la fonction est planifiée pour être supprimée du CRT.

Les fonctions sécurisées n'empêchent pas ou ne corrigent pas d'erreurs de sécurité ; en revanche, elles décèlent des erreurs lorsqu'elles se produisent.Elles exécutent les contrôles supplémentaires pour les conditions d'erreur, et dans le cas d'une erreur, ils appellent un gestionnaire d'erreurs (consultez Validation des paramètres).

Par exemple, la fonction de strcpy n'a aucun moyen de savoir si la chaîne qu'elle copie est trop grande pour sa mémoire tampon de destination.Toutefois, son équivalent sécurisés, strcpy_s, prend la taille de la mémoire tampon comme paramètre, ce qui peut déterminer si un dépassement de mémoire tampon se produira.Si vous utilisez strcpy_s pour copier onze caractères dans une mémoire tampon de dix-personnage, c'est une erreur de votre part ; strcpy_s ne peut pas corriger l'erreur, mais elle peut détecter votre erreur et vous avertir en appelant le gestionnaire de paramètre non valide.

Élimination des avertissements de désapprobation

Il existe plusieurs manières d'éliminer les avertissements de désapprobation pour les fonctions plus anciennes et moins sécurisé.Le plus simple est simplement de définir _CRT_SECURE_NO_WARNINGS ou utilisez le pragma warning.L'un ou l'autre désactive les avertissements de désapprobation, mais bien sûr les problèmes de sécurité qui provoquaient toujours les avertissements existent.Il est de loin préférable de laisser les avertissements de désapprobation activés et de tirer parti des nouvelles fonctionnalités de sécurité CRT.

En C++, la méthode la plus simple pour ce faire consiste à utiliser Surcharges sécurisées de modèle, qui dans de nombreux cas pour supprimer des 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.par exemple, considérez cet appel déconseillé à strcpy:

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

Définir _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES comme 1 élimine l'avertissement en modifiant l'appel d' strcpy à strcpy_s, ce qui empêché les dépassements de mémoire tampon.Pour plus d'informations, consultez Surcharges sécurisées de modèle.

Pour ces fonctions déconseillées sans sécuriser des surcharges de modèle, vous devez certainement envisager de mettre à jour manuellement votre code pour utiliser les versions sécurisées.

Une autre source d'avertissements de désapprobation, non liée à la sécurité, sont les fonctions de POSIX.Remplacez les noms de fonctions de POSIX par leurs équivalents standard (par exemple, modifier accédez à _access), ou désactiver des avertissements POSIX-mis en relation de désapprobation en définissant _CRT_NONSTDC_NO_WARNINGS.Pour plus d'informations, consultez Deprecated CRT Functions.

fonctionnalités de sécurité supplémentaires

Certaines fonctionnalités de sécurité sont les suivants :

  • Parameter Validation.Les paramètres passés aux fonctions CRT sont validés, dans les deux sécuriser les fonctions et dans de nombreuses versions préexistant des fonctions.Ces preuves incluent :

    • Vérification des valeurs d' NULL est passé aux fonctions.

    • Vérification des valeurs énumérées de vérifier la validité.

    • Vérifier que les valeurs intégrales sont dans des plages valides.

  • Pour plus d'informations, consultez Validation des paramètres.

  • Un gestionnaire pour les paramètres incorrects est également accessible au développeur.Lorsqu'une rencontre d'un paramètre non valide, au lieu de déclarer et de quitter l'application, le CRT fournit une méthode pour vérifier ces problèmes avec _set_invalid_parameter_handler fonctionnent.

  • Sized Buffers.Les fonctions sécurisées requièrent que la taille de la mémoire tampon ne passe à toute fonction qui écrit dans une mémoire tampon.Les versions sécurisées vérifient que la mémoire tampon est suffisamment grande pour entrer, lui permettant d'éviter les erreurs de dépassement de mémoire tampon dangereuses qui peuvent permettre au code malveillant pour exécuter.Ces fonctions généralement retournent un type d' errno de code d'erreur et appellent le gestionnaire de paramètre non valide si la taille de la mémoire tampon est trop petite.Fonctionne plutôt lu les mémoires tampons d'entrée, telles que gets, a des versions sécurisées qui exigent que vous indiquiez une taille maximale.

  • Null termination.Certaines fonctions qui permettent de les chaînes potentiellement non-terminées ont des versions sécurisées qui vérifient que les chaînes sont correctement null terminées.

  • Enhanced error reporting.Codes d'erreur de retour de fonctions sécurisées avec plus d'informations sur l'erreur que n'était disponible avec les fonctions de la forme préexistante.Les fonctions sécurisées et de nombreuses la forme préexistante fonctionne errno maintenant la valeur et retourne souvent un type de code d' errno également, pour fournir un meilleur rapport d'erreurs.

  • Filesystem security.Accès au fichier sécurisé d'E/S de fichiers de support sécurisé d'API dans le cas par défaut.

  • Windows security.Les API de processus sécurisées imposent des stratégies de sécurité et permettent aux ACL à spécifier.

  • Format string syntax checking.Des chaînes valides sont détectées, par exemple, utiliser des caractères incorrects de champ de type dans les chaînes de format d'printf .

Voir aussi

Référence

Surcharges sécurisées de modèle

Fonctionnalités de bibliothèque CRT

Concepts

Validation des paramètres