Question

La bibliothèque standard C est notoirement mauvaise en ce qui concerne la sécurité des E / S. De nombreuses fonctions présentent des dépassements de mémoire tampon (gets, scanf) ou peuvent surcharger la mémoire si les arguments corrects ne sont pas fournis (<=>), etc. De temps en temps, je tombe sur un pirate informatique entreprenant qui a écrit sa propre bibliothèque et qui ne présente pas ces défauts.

Quelles sont les meilleures de ces bibliothèques que vous avez vues? Les avez-vous utilisés dans le code de production et, dans l'affirmative, lesquels n'ont pas été considérés comme des projets de loisir?

Était-ce utile?

La solution

J'utilise la bibliothèque GLib , qui propose de nombreuses fonctions standard et non standard.

Voir https://developer.gnome.org/glib/stable/

et peut-être que vous tombez amoureux ...:)

Par exemple:

https: // développeur .gnome.org / glib / stable / glib-String-Utility-Functions.html # g-strdup-printf

explique que g_strdup_printf est:

  

Semblable à la fonction standard C sprintf () mais plus sûr, car elle calcule l’espace maximal requis et alloue de la mémoire pour conserver le résultat.

Autres conseils

Cela ne répond pas vraiment à votre question sur les bibliothèques les plus sûres à utiliser , mais la plupart des fonctions vulnérables aux dépassements de mémoire tampon que vous avez mentionnés ont des versions plus sûres qui prennent la longueur de la mémoire tampon comme argument à éviter. les trous de sécurité qui sont ouverts lorsque les méthodes standard sont utilisées.

Sauf si vous avez assoupli le niveau des avertissements, vous recevez généralement des avertissements du compilateur lorsque vous utilisez les méthodes obsolètes, ce qui vous suggère d'utiliser plutôt les méthodes les plus sûres.

Je pense que la bibliothèque Apache Portable Runtime (apr) est plus sûre que la bibliothèque C standard. Je l'utilise, bien, dans le cadre d'un module apache, mais aussi pour des processus indépendants.

Comme exemple de ce dont je parle, D.J. Bernstein, mieux connu sous le nom de djb, auteur de djbdns et de qmail, a créé djblib , qui offre une alternative rapide, compacte et sécurisée à de nombreuses fonctions de bibliothèque standard C.

Pour Windows, il existe une bibliothèque C / C ++ "sûre" .

Peut-être que la première question à poser est de savoir si vous avez vraiment besoin de C simple? (Peut-être une langue comme .net ou java est-elle une option - les dépassements de tampon, par exemple, ne sont plus vraiment un problème)

Une autre option consiste peut-être à écrire des parties de votre projet en C ++ si les autres langages de niveau supérieur ne sont pas une option. Vous pouvez alors avoir une interface C qui encapsule le code C ++ si vous avez vraiment besoin de C.

Parce que si vous ajoutez toutes les fonctions avancées, la bibliothèque standard C ++ est intégrée - votre code C ne sera que légèrement plus rapide la plupart du temps (et contiendra beaucoup plus de bogues qu'un framework existant et testé).

Vous êtes toujours libre d’implémenter et d’utiliser toute bibliothèque de votre choix. Le plus difficile est de vous assurer qu’elle est disponible sur les plateformes sur lesquelles vous avez besoin de votre logiciel. Vous pouvez également utiliser des wrappers autour des fonctions standard, le cas échéant.

La question de savoir si c’est vraiment une bonne idée est quelque peu discutable, mais le comité de la norme C a publié le document TR24731 - pour un ensemble de fonctions C plus sûrs. Il y a certainement de bonnes choses là-dedans. Consultez cette question: utilisez-vous le TR 24731 Fonctions de sécurité dans votre code C? , qui inclut des liens vers le rapport technique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top