Langages de programmation et sécurité informatique

Spécialité(s)


Résumé

Lorsque l’on compare les langages avec une optique de sécurité informatique, il est naturel de penser à Rust et son borrow checker, ou aux nombreuses erreurs de gestion de la mémoire en C. Il existe cependant de nombreux autres axes permettant de différencier les langages !


La différence la plus visible entre deux langages de programmation est évidemment leur syntaxe. Certaines études prétendent que la densité des bugs par lignes de code ne diffère pas entre les langages, ce qui avantagerait les langages les plus expressifs, ou aux syntaxes compactes. Mais, comme avec toutes les études (voir encadré), ces conclusions sont à prendre avec beaucoup de recul. Cependant, on ne peut nier qu’il existe d’importantes différences liées à la sécurité informatique. Quelques exemples :

  • en C, C++ et PHP, les vulnérabilités sont plus critiques que dans d’autres langages (jusqu’à plus de la moitié de critiques selon [VERACODE]) ;
  • certains projets concentrent les vulnérabilités (entre 10 et 30 failles sont publiées chaque année pour chaque CMS majeur en PHP), et ce sont souvent des variations autour de la même vulnérabilité (coucou, Struts !) ;
  • les domaines d’application des langages conditionnent les vulnérabilités...
Cet article est réservé aux abonnés. Il vous reste 96% à découvrir.
S'abonner à Connect
  • Accédez à tous les contenus de Connect en illimité
  • Découvrez des listes de lecture et des contenus Premium
  • Consultez les nouveaux articles en avant-première
Je m'abonne
Références

[VERACODE] Veracode, « State of Software Security v11 » : 
https://www.veracode.com/state-of-software-security-report

[LUU] Dan Luu, « Literature review on the benefit of static types » : https://danluu.com/empirical-pl/

[OVERFLOW] David McCall, « Wrap on integer overflow is not a good idea » : 
https://pvs-studio.com/en/blog/posts/0589/

[JSEQ] JS Comparison Table : https://dorey.github.io/JavaScript-Equality-Table/

[UB] John Regher, « Undefined Behavior in 2017 » : https://blog.regehr.org/archives/1520

[PT] Rust by Example, Phantom Types : https://doc.rust-lang.org/rust-by-example/generics/phantom.html

[HACL] Benjamin Beurdouche, Jean Karim Zinzindohoue, « HACL* une bibliothèque de cryptographie formellement vérifiée dans Firefox » : https://www.sstic.org/2018/presentation/hacl_cryptographie_formellement_verifiee_dans_firefox/

[ELM] Elm langage : https://elm-lang.org/

[PHP] Eevee, PHP: a fractal of bad design : https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/

[WAT] Gary Bernhardt, Wat : https://www.destroyallsoftware.com/talks/wat

[SI] Simon Marechal, Writing a Symbolic Interpreter
https://www.synacktiv.com/en/publications/writing-a-toy-symbolic-interpreter-and-solving-challenges-part-3.html

 



Article rédigé par

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous