J’ai quand même l’impression que selon le langage, des les erreurs (dont la non-vérification des entrées utilisateur) peuvent provoquer plus ou mois de dégâts.
Par exemple, j’ai l’impression (corrigez-moi si je me plante) qu’un entrée non vérifiée va assez facilement conduire à une faille de sécurité ou à de la fuite d’informations sur un code en C ou C++ ; tandis que sur un langage à JVM, en Python, en .NET on va plutôt se retrouver avec « simplement » un comportement aberrant, au pire un déni de service, en tous cas des conséquences moins graves.
Les automatismes du langage peuvent jouer aussi : le jour où on a trouvé un potentiel déni de service dans la bibliothèque IEEE 754 de gestion des flottants que tout le monde utilise et où il suffisait de passer une chaine de caractères spécifique pour faire planter la conversion en flottants, ça n’a posé pratiquement aucun problème réel sur les sites en Java et .NET, mais a été catastrophique pour ceux en PHP car toute entrée qui ressemble à un flottant est automatiquement convertie en flottant.
Je considère à part la question des injections SQL, parce que là tu écris dynamiquement un code à partir d’un autre langage, ce qui nécessite luxe de précautions par nature.
La vraie conséquence, c’est que je suis toujours assez surpris de voir qu’on code des logiciels critiques en terme de sécurité (typiquement : les outils de cryptographie) en C ou C++, connaissant les limites inhérentes à ces langages en terme de sécurité (la charge qui repose sur les développeurs est maximale) alors qu’on a des langages qui me semblent plus efficaces pour le faire. Et le fait est qu’on trouve des failles des sécurité liées au langage dans de tels logiciels.
Parce que
Assez clairement, la majorité du code C qui est en production est insuffisamment testé ou vérifié. Cf la vidéo.
La majorité du code tout court qui est en production est insuffisamment testée ou vérifiée, pour tout un tas de raisons bonnes comme mauvaises. C’est pour ça que de mon point de vue, tant que c’est possible il faut utiliser des langages qui limitent les impacts de ces manques de tests, qui arriveront de toutes façons.