Thèse soutenue

Etendre des interpréteurs par détournement, ou comment étendre des interpréteurs sans en modifier le code : avec une application à des analyses dynamiques pour un interpréteur de JavaScript

FR  |  
EN
Auteur / Autrice : Florent Marchand De Kerchove
Direction : Mario Südholt
Type : Thèse de doctorat
Discipline(s) : Informatique et applications
Date : Soutenance le 18/11/2016
Etablissement(s) : Nantes, Ecole des Mines
Ecole(s) doctorale(s) : École doctorale Sciences et technologies de l'information et mathématiques (Nantes)
Partenaire(s) de recherche : Laboratoire : ASCOLA. ASpect and COmposition LAnguages - Laboratoire d’Informatique de Nantes Atlantique (UMR 6241) (Nantes)
Jury : Président / Présidente : Christophe Dony
Examinateurs / Examinatrices : Guillaume Hiet, Jacques Noyé
Rapporteurs / Rapporteuses : Christophe Dony, Stéphane Ducasse

Résumé

FR  |  
EN

Afin de sécuriser les applications web, nous nous sommes intéressés à appliquer des analyses dynamiques de sécurité à des programmes JavaScript. Dansce contexte, pouvoir rapidement modifier l’interpréteur et composer des analyses à l’exécution est primordial. Une façon d’effectuer ces changements aurait été parrefactorisation. Mais la refactorisation peut être délicate et chronophage, car elle implique de réécrire des parties du code source, voire de réorganiser toute l’architecture du programme. La refactorisation est trop coûteuse lorsque prime la vitesse d’itération.Nous explorons une alternative économe à la refactorisation : le détournement. Détourner un programme c’est changer ses résultats sans directement modifierson code source. Pour détourner un programme, on exploite des techniques d’indirection, tels que la portée dynamique et la métaprogrammation.On commence par passer en revue les techniques utilisées pour des problèmes connexes d’extensibilité, et on applique ces techniques pour détourner des interpréteurs simples. Puis, on montre comment le détournement peut aider à construire un interpréteur par incréments, pour permettre d’activer dynamiquement des comportements alternatifs. Enfin, on applique ces techniques pour détourner un véritable interpréteur JavaScript par de multiples analyses dynamiques de sécurité.Au prix d’un potentiel impact en efficacité et en sûreté, détourner l’interpréteur est à la fois plus rapide et plus flexible que de le réécrire, ce qui fait du détournement une alternative légitime à la refactorisation.