Top 10 des erreurs dangereuses dans la programmation en C?


2

Quelles sont les principales erreurs dangereuses dans la programmation en C? Par exemple, l'utilisation abusive d'un strcpy provoque un débordement de pile et une injection de code. Par exemple:

Je suis à la recherche d'au moins 10 mauvais modèle de programmation en C.

  0

Ne sachant pas ce que vous faites est No.1. Marquer pour fermer comme un mauvais subjectif. 09 août. 132013-08-09 09:00:20

+2

Je suis à la recherche d'un top dix des erreurs risquées en C? qu'est-ce que vous voulez en savoir plus? Je suis un développeur C et je veux les éviter. 09 août. 132013-08-09 09:20:55

  0

Ma liste http://www.andromeda.com/people/ddyer/topten.html 11 août. 132013-08-11 03:13:39

1

Je pense que la meilleure façon d'apprendre la réponse à cette question est de lire beaucoup de livres et de faire les meilleures practies. Je vous conseille ce livre Secure Coding in C and C++ à tout sujet sur le codage sécurisé dans c.


1

Vous pouvez consulter le CWE/SANS Top 25 Most Dangerous Software Errors. C'est pour le développement de logiciel en général (indépendant du langage de programmation) mais inclut également des erreurs faites en C/C++.


4

La plus grande erreur dangereuse dans la programmation C est en utilisant C. C'est une affirmation impopulaire, mais des décennies d'expérience me soutiennent. C est un bon langage de programmation en ce sens qu'il vous permet d'exprimer des opérations dans une "machine abstraite" (comme le dit le standard C) qui sera traduite efficacement en code machine (les outils de traduction s'exécutent rapidement et le résultat est rapide). Cependant, cette traduction vient à un prix élevé, à savoir qu'ils ne sont pas une garantie pour les erreurs, et il y a beaucoup de "comportements non définis" qui se cachent dans l'ombre. Pointer aliasing rules, par exemple, ne sont presque jamais compris correctement, conduisant à un code apparemment bon qui échouera (parfois de manière à créer des vulnérabilités exploitables) lorsqu'un nouveau compilateur est utilisé ou qu'un commutateur d'optimisation est activé.

Vous cherchez une "liste d'erreur" est le mauvais état d'esprit. Vous voulez une liste noire: des choses à éviter, en supposant que "tout le reste" est sûr. Vous devriez vouloir un whitelist: une liste de permis façons de développer, à l'exclusion de tout le reste. Les programmeurs C réussis sont des programmeurs qui sont capables de maintenir leur propre discipline pour jamais utiliser une construction qu'ils ne maîtrisent pas de bout en bout; et par "mastering" j'entends la capacité de décrire comment le compilateur C traduira cela en opcodes d'assemblage, y compris toutes les optimisations possibles que les compilateurs C sont autorisés à faire. Une bonne façon d '«utiliser C» est d'écrire la ou les routines qui ont vraiment besoin de vitesse dans certains C optimisés, et le reste du code dans un langage plus sûr qui permettra de plus rapide et plus facile à développement (par exemple Python, C#, Node.js, Perl ... le choix est grand).