Le forum PHP 2024 à DisneyLand – Jour 1 !
Create your own malware sandbox – Alexandre Daubois
Alexandre Daubois a présenté une approche pour sécuriser le téléchargement de fichiers dans le cadre d’un pentest. Face à l’exigence d’une meilleure sécurité, trois options s’offraient à lui : abandonner (impossible pour le client), utiliser une sandbox existante, ou créer sa propre solution.
Après avoir écarté l’option de l’antivirus maison (trop complexe et source de faux positifs/négatifs), Alexandre a opté pour une sandbox maison, plus adaptée au contexte d’un back-office interne, authentifié et privé.
Sa solution repose sur plusieurs étapes clés :
- Création d’un répertoire de sandbox
- Logging et réinitialisation de la sandbox
- Vérification des caractères interdits dans le nom du fichier
- Lecture du fichier et suppression des droits d’exécution
- Analyse des “magic bytes” pour identifier le type de fichier et bloquer les exécutables
- Gestion spécifique des archives pour éviter les attaques de type “tar bomb” ou “récursion infinie”
Le résultat : une sandbox efficace, développée avec moins de 10 classes PHP !

Comment déboguer xdebug – Kevin Dunglas
Kevin a partagé un retour d’expérience sur une situation de débogage complexe rencontrée lors du développement de FrankenPHP, son serveur PHP haute performance.
Confronté à un bug difficile à reproduire, Kevin a dû identifier la source du problème. Xdebug, l’outil de débogage en PHP, était mis en cause, ce qui a compliqué l’investigation.
Après avoir obtenu un exemple reproductible grâce à la communauté, Kevin a utilisé le GNU Debugger (gdb) pour analyser le comportement de Xdebug au niveau du code C. Il a ainsi pu identifier une récursion infinie causée par un problème de compatibilité avec les builds ZTS (Zend Thread Safety).
Ce retour d’expérience nous rappelle l’importance :
- de la contribution à la communauté open source
- de la communication et du partage d’informations
- de l’utilisation des bons outils de débogage
- de la persévérance et de la rigueur dans l’analyse des problèmes
What’s new in Symfony 7.x – Nicolas Grekas
Nicolas Grekas a présenté les nouveautés de Symfony 7.x, mettant en avant l’ampleur du travail accompli avec 33 000 lignes de code ajoutées et 14 000 lignes supprimées. Parmi les nouvelles fonctionnalités et améliorations :
- HTML sanitizer
- Clock
- RemoteEvent et Webhook
- Scheduler
- AssetMapper
D’autres composants sont en cours de développement, notamment :
- ObjectMapper
- JsonEncoder
- FeatureFlag
- AccessToken
Symfony 7.x apporte également des améliorations en termes d’expérience développeur, de performances et d’utilisation de PHP. Pour une vue d’ensemble complète, consultez la newsletter Symfony ou les articles de blog dédiés aux nouvelles versions. Symfony a également publié un résumé des nouveautés sur son site web.
Les nouveautés de PHP 8.4 – Derick Rethans
Derick Rethans, créateur de Xdebug et contributeur majeur de PHP, a présenté les nouveautés de PHP 8.4. Parmi les points importants :
Property hooks : Définition de getters et setters locaux aux propriétés, pour un code plus propre et plus concis.
new sans parenthèses : Amélioration syntaxique pour l’instanciation d’objets.
Parsing HTML5 : Meilleure prise en charge du HTML5 avec la classe \Dom\HTMLDocument
.
Lazy objects : Optimisation des performances grâce au chargement différé des dépendances.
JIT amélioré et documenté : Activation simplifiée et documentation plus complète du compilateur Just-In-Time.
Subclasses de PDO : Amélioration de l’API PDO avec des sous-classes spécifiques aux bases de données (PDOMySQL, PDOFirebird, etc.).
Nouveaux modes d’arrondi : Extension des fonctions d’arrondi avec de nouvelles options.
Augmentation du facteur de coût bcrypt par défaut : Renforcement de la sécurité des mots de passe hachés.
Dépréciation du type null implicite : Amélioration de la rigueur du typage.
RFC policies : Publication en ligne des politiques et procédures relatives aux RFC PHP.
Changement du cycle de release : Prolongation du support de sécurité à 4 ans (2 ans de maintenance active + 2 ans de corrections de sécurité).
Visibilité asymétrique : Contrôle plus fin de l’accès en lecture et en écriture aux propriétés des classes.
Amélioration de l’attribut DEPRECATED
: Ajout de l’argument since
pour indiquer la version de PHP à partir de laquelle un élément est déprécié.
Le cycle de vie d’une variable – Benoit VIGUIER
Nicolas Grekas a présenté les nouveautés de Symfony 7.x, mettant en avant l’ampleur du travail accompli avec 33 000 lignes de code Benoit Viguier a abordé le sujet de la gestion de la mémoire en PHP, en mettant l’accent sur les pièges à éviter et les outils à connaître pour optimiser nos programmes.
Il a notamment évoqué la controverse suscitée par l’utilisation de la fonction gc_disable()
par Composer, justifiée dans le cas de longs scripts en console pour éviter des problèmes de performance avec le garbage collector de PHP.
Pour optimiser la gestion de la mémoire, Benoit a présenté deux classes natives :
WeakReference
: permet de créer des objets sans incrémenter le nombre de références à une variable, évitant ainsi les fuites de mémoire dues aux références circulaires.WeakMap
: permet de stocker des références à des objets sans contribuer à leur comptage de références, facilitant ainsi la libération de la mémoire.
Pour explorer encore davantage le sujet, Benoît recommande de visionner la conférence suivante : Hunting down memory leaks – Benoit Jacquemont.
PMU: un plugin composer pour la gestion de Monorepository en PHP – Antoine Bluchet
Antoine a présenté PMU, un plugin Composer qu’il a développé pour faciliter la gestion des monorepos en PHP. Il a débuté sa présentation en expliquant le concept de monorepo : un dépôt unique contenant plusieurs projets liés, contrairement aux polyrepos où chaque projet possède son propre dépôt.
Avantages du monorepo:
- Meilleure visibilité des projets et de leurs dépendances
- Simplification du partage de code entre projets
- Cohérence des versions de dépendances et des outils
- Efficacité accrue de l’intégration continue et du déploiement continu
Inconvénients du monorepo :
- Complexité accrue de la gestion, notamment pour les gros projets
- Impact potentiel sur les performances du système de contrôle de version
Outils pour gérer les monorepos en PHP :
- Symfony Flex
- splitsh-lite
- symplify/monorepo-builder
- alexander-schranz/mono
- PMU : le plugin Composer développé par Antoine, offrant des fonctionnalités de gestion des dépendances, de visualisation du graphe de dépendances, d’exécution de commandes sur plusieurs projets et de création de liens symboliques.
Le choix entre monorepo et polyrepo dépend du contexte et des besoins de chaque projet. PMU se présente comme une solution pour faciliter la gestion des monorepos en PHP.
Éliminer le gaspillage dans votre processus de développement – Matthias Noback
Cette conférence a offert une perspective sur l’optimisation des processus de développement pour une meilleure productivité et une livraison de valeur plus rapide.
L’accent a été mis sur la performance collective, remettant en question le mythe du “programmeur 10x” et soulignant l’importance de la collaboration, du partage des connaissances et de l’amélioration continue en équipe.
Coder ensemble, c’est coder mieux !
La programmation en binôme ou à plusieurs (“mob programming”) a été présentée comme une technique pour améliorer la qualité du code et la prise de décision. L’idée est de coder à plusieurs, avec un pilote au clavier et des navigateurs qui guident et réfléchissent ensemble.
Fluidifiez votre “chaîne de valeur”
L’analyse de la “chaîne de valeur” permet d’identifier les points de blocage et les sources de gaspillage dans le processus de développement (branches stagnantes, features non déployées, process de review interminables, etc.).
Des conseils ont été donnés pour fluidifier le processus : automatisation des tests, suppression des étapes inutiles, découpage des tâches, et utilisation de la méthode Mikado pour le refactoring.
Conclusion
Simplifier, automatiser et collaborer sont les maîtres-mots pour un développement efficace et une livraison de valeur rapide et sécurisée.
Conclusion de la journée
Après ces conférences, nous avons pu nous rendre à l’apéro communautaire organisé par l’AFUP avec encore une fois un jeu qui encourageait à aller à la rencontre des uns et des autres.