Bibliothèque C sécurisante

De RAD Studio
Aller à : navigation, rechercher

Remonter à Référence de la bibliothèque d'exécution C


La principale raison pour laquelle la bibliothèque C sécurisante a vu le jour a été le besoin de vérification des limites pour les fonctions de gestion des chaînes dans la bibliothèque C. De nombreuses fonctions de la bibliothèque C s'attendent à ce que l'appelant fournisse des paramètres chaîne assez longs pour contenir le résultat des opérations. Quand une chaîne plus grande est écrite "sur" une chaîne plus petite, les données sont en fait écrites au-delà de la fin, en écrasant d'autres données de programmes. Cela peut conduire à des échecs "mystérieux", étant donné que le programme n'a aucun moyen de savoir si quelque chose était incorrect ni quand.

Une solution typique consistait à essayer d'utiliser des chaînes qui étaient "assez grandes" mais cela pouvait conduire aux deux problèmes suivants : soit le résultat était une perte d'espace, soit le "assez grand" de l'utilisateur n'était pas assez grand dans la pratique. En outre, les dépassements de capacité des tampons peuvent être exploités afin d'exécuter du code dangereux, en compromettant la sécurité des systèmes d'exploitation et des réseaux.

Pour de nombreuses fonctions de la bibliothèque d'exécution C, la bibliothèque C sécurisante introduit des paramètres supplémentaires qui sont utilisés pour la vérification des limites de tableaux de caractères, et les données ne sont jamais écrites au-delà de la fin d'un tableau. En outre, elle introduit des contraintes d'exécution et le moyen pour l'utilisateur de définir ses propres fonctions de gestion des violations d'exécution. En faisant cela, le programme peut savoir quand et où quelque chose ne va pas avec un tableau de caractères et peut corriger l'erreur, ou échouer élégamment.

Remarque: La bibliothèque C sécurisante n'est pas prise en charge sur les applications macOS

Le style de programmation que la bibliothèque C sécurisante préconise génère du code mieux sécurisé et comportant moins de bogues.

Exemple

int main(){ 
    char corpName[10];
    printf ("Enter your corporation name:  ");
    gets(name);
    printf ("Your corporation name is: %s", corpName);
    return 0;
}

Si le client entre un nom de plus de 9 caractères, une corruption des données et de la pile peut se produire. Changer gets(name); en gets_s(name,10) élimine ces problèmes. Quel que soit le nombre de caractères entré par l'utilisateur, seuls les 9 premiers caractères sont stockés dans le tableau de caractères corpName.

stdio.h

Routines d'entrée/sortie

Fonctions d'accès aux fichiers

Fonctions d'entrée/sortie formatées

Fonctions d'entrée/sortie de caractères

stdlib.h

Gestion des contraintes d'exécution

Communication avec l'environnement

Utilitaires de recherche et de tri

string.h

Fonctions de copie

Fonctions de concaténation

Fonctions de recherche

Fonctions diverses

time.h

Fonctions de conversion horaire