Remplir un tableau de pointeurs d'entiers

Le problème exposé dans ce sujet a été résolu.

Ne serait-ce que pour le C, valgrind fait une bonne partie du travail à ta place pour résoudre de nombreux problèmes.

lhp22

Hum, bof. C’est plutôt le minimum vital. Disons qu’un programme dont les tests ne passent pas dans un mode de debug avec instrumentation des accès mémoire, on sait déjà que c’est mort. De là à dire que l’on est en sécurité … Il y a du chemin.

Assez clairement, la majorité du code C qui est en production est insuffisamment testé ou vérifié. Cf la vidéo.

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.

C’est toujours pareil est ce que le domaine le permet ?

Dans le critique, la réponse est non, au mieux ce sera du Ada, ou Atelier B, mais C est encore bien présent pour de bonnes raisons : l’outillage pour faire de la vérification dans ces domaines est hyper fourni et les autres langages ne peuvent pas donner maîtrise sur des paramètres qui doivent absolument être justifiés avec un niveau de détail assez fou pour la certification des produits. Et moins tu as de maîtrise sur le processus de production du code finalement exécuté plus c’est dur.

Mais il faut pas perdre espoir, il y a des gens qui commencent à bosser sur ce genre de choses : https://ferrous-systems.com/blog/sealed-rust-the-pitch/

Pour les composants low-level, ou ayant trait à la sécurité, les performances malheureusement ont un impact assez important. Il y a une pression assez importante pour que les algos axés sécurité soient optimisés aux petits oignons pour fournir un très haut débit. Il y a aussi des problématiques qui ont trait au side-channel et qui font que par exemple, on veut s’assurer que passer dans une branche ou une autre d’un algo ne va pas être détectable facilement, etc.

Et encore une fois, l’espoir n’est pas mort, il y a des gens qui utilisent par exemple F-Star pour faire des algos cryptos avec de très bonnes performances tout en étant formellement vérifiés : https://project-everest.github.io/ (et certains composants sont déjà en production dans Firefox par exemple).

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte