web-dev-qa-db-fra.com

Quels sont les risques de sécurité / vulnérabilités que chaque programmeur C doit être au courant?

Il existe de nombreux risques de sécurité provenant d'un contact étroit avec le matériel, par opposition à l'utilisation d'API bien testés et prouvées de langages de programmation de haut niveau. Il est beaucoup plus facile de provoquer un débordement de tampon en C que dans une langue telle que Java.

Quels sont les risques ou les vulnérabilités (par exemple les débordements tampons) que chaque programmeur C doit être au courant (c'est-à-dire des vulnérabilités pertinentes pour les programmeurs C)? Quels problèmes pourraient-ils conduire à? Comment les éviter et quelles sont les erreurs courantes qui se produisent dans des programmes?

13
Anto

Certains des risques spécifiques C comprennent: Overflows tampons , Attaques de chaîne de formatage et Overflows entier .

5
Nemanja Trifunovic

Voici un risque facile à manquer pouvant causer des problèmes qui prendront des heures à réparer.

Considérez le code suivant, qui compilera sans problème.

if(lpstr_current_state = CONST_EMERGENCY_STATE_HOLY_CRAP)
{
    do_warn_joint_chiefs_of_staff_of_nuclear_attack();
}

Quand vous vérifiez si lpstr_current_state est dans CONST_EMERGENCY_STATE_HOLY_CRAP Vous attribuez réellement. Il est préférable de toujours mettre la variable constante à gauche. Lorsque vous mettez la constante à gauche, le compilateur échouera car vous ne pouvez pas attribuer une valeur à une variable.

if(CONST_EMERGENCY_STATE_HOLY_CRAP = lpstr_current_state)
{
    do_warn_joint_chiefs_of_staff_of_nuclear_attack();
}

Ensuite, vous pouvez facilement vous dire, "Sainte Crap, qui aurait pu être mauvaise", tout en réparant le code à lire ...

if(CONST_EMERGENCY_STATE_HOLY_CRAP == lpstr_current_state)
{
    do_warn_joint_chiefs_of_staff_of_nuclear_attack();
}
4
Kristofer Hoch

Il y a juste -n Risque de sécurité: le fait qu'il y ait des personnes à l'extérieur qui feront de leur mieux pour attraper toute vulnérabilité dans votre logiciel et l'exploiter pour leur propre gain. Tout le reste suit de là.

Ainsi, quand vous pensez que "personne dans leur esprit de droite ...", alors vous devez penser immédiatement "sauf quelqu'un qui souhaite pirater des ordinateurs d'autres personnes ferait exactement cela".

La plus grande conséquence est que chaque fois que vous réagissez aux événements à l'extérieur (par exemple, en traitant des données livrées de l'extérieur), vous devez supposer que ces données étaient sous contrôle de votre pire ennemi.

0
gnasher729