Première journée du PHP Forum 2020

2020-11-09 | Florent DAMIENS

image article

Forum PHP 2020

Cette année est une édition un peu spéciale car elle se déroule uniquement en ligne, une première pour le forum PHP ! Les talks s'enchaînent les uns à la suite des autres via des webinars où un channel est dédié aux questions. Pierre, Louis et Florent vont vous faire découvrir les différentes présentations de la première journée !

Au programme de cette journée du e-commerce avec Sylius, ces conférences seront suivies de près par Pierre et Florent. On parlera également de PHP 8.0, du chiffrement en base de données, de OpenId Connect et du protocole Vulcain et aussi des performances Web ! Le programme est donc assez chargé pour cette première journée !

Jeudi 22/10 matin

Maintenir l'activité des commerces pendant le confinement ? Sylius à la rescousse !

On commence directement par une conférence orientée e-commerce avec Sylius présenté par Jade Bellereau. Avec le confinement du début d'année et la fermeture physique des magasins, beaucoup de commerçants se sont retrouvés sans aucune possibilité de vendre leurs produits. Sylius peut être vu comme une alternative viable pour démarrer un site e-commerce. Ce talk permet de mettre en avant un plugin développé spécialement pour palier aux restrictions sanitaires, il s'agit du 'click & collect'. Le commerçant peut facilement proposer des retraits en magasin à des heures spécifiques (sur le même principe qu'un drive) le tout via une interface assez intuitive. Vous pouvez retrouver le plugin ici. - Florent

PHP 8: A New version, A new era

Une nouvelle version majeure de PHP sera bientôt publiée (le 3 Décembre 2020) et il était impossible de ne pas avoir une petite conférence pour faire un (rapide) tour d'horizon des nouveautés. Pour cela c'est Gabriel Caruso, un des release managers, qui s'y est collé. Après un rapide topo sur les performances améliorées, qui sera surtout valable sur les gros processus grâce au JIT (Just-In-Time), Gabriel s'est focalisé sur 4 features de cette nouvelle version :

  • les Attributes
  • les Union Types
  • le match Control Structure
  • et les Named Argument

Des features attendues depuis longtemps pour certaines, et qui font plaisir à voir arriver sur le langage PHP.
Il a enchaîné sur quelques changements au niveau des Exceptions (comme la variable de catch qui n'est plus obligatoire) et sur certaines BC break. Pour finir, quelques changements internes ont été abordés qui bénéficieront à certains projets comme PHPStan. En clôture de cette conférence, petit listing des personnes derrière PHP 8.0 sans qui ce langage n’évoluerait pas. Ce fut une conférence bien trop courte pour parler de la totalité des nouveautés, mais tout de même appréciable pour aborder cette nouvelle version. - Louis

Introduction à OpenID Connect

En dernière conférence de cette matinée, nous avons eu le droit à une présentation d'OpenID Connect par Karim PINCHON. Il a d'abord commencé par une petite explication d'OAuth2.0 qui est souvent utilisé à tort pour de l'authentification, alors que son rôle est juste de la délégation d'autorisation. OpenID est un peu différent car c'est une surcouche à OAuth2 en proposant justement cette autentification. La différence majeure se trouve dans le jeton. OpenID Connect a un jeton ID Token (au format JWT) qui est constitué principalement :

  • des paramètres d'authentification (date d'expiration / date de création / contrôles pour valider l'ID Token et l'Access Token),
  • les accréditations de l'utilisateur (rôles, habilitations…),
  • et enfin les attributs de l'utilisateur.

L'avantage d'ID Connect est certain pour ceux qui souhaitent une identification centralisée entre les différents services et applications de leur SI. En exemple nous pouvons citer FranceConnect, mis en place en France par l'Etat, qui permet par exemple, de se connecter avec son identifiant des impôts pour connaître le solde de points de son permis de conduire. Mais c'est aussi tout à fait valable pour ceux ne voulant pas gérer eux même l'authentification en ne proposant que des authentifications tierces (Google / Facebook…). Cette conférence fut rafraîchissante car nous utilisons déjà OpenID Connect en interne grâce à l'excellent service Auth0 qui permet de l'implémenter très simplement. - Louis

REX sur le chiffrement de base de données

Dans le milieu de la santé, il est important de s'assurer que les données des patients soient chiffrées pour des raisons de sécurité. Plusieurs bibliothèques permettent de chiffrer ces données : OpenSSL (https://www.openssl.org/) et Libsodium (https://www.openssl.org/) par exemple.

Admettons que nous ayons une recherche à effectuer sur le nom/prénom d'un patient.

Comment cela se passe-t-il avec une application dont l'ORM est Doctrine ? L'idée est de consommer les événements de Doctrine ; nous allons déchiffrer chaque enregistrement de la table dont les attributs sont chiffrés pour ensuite récupérer ce qui nous intéresse. Ceci est un processus consommateur en ressources qui va potentiellement engendrer des lenteurs selon la volumétrie de la table en question. Ce fonctionnement est difficile à pérenniser.

De plus, il faut également penser à chiffrer les fichiers de log temporaires, les tablespaces du SGBD. Des outils existent pour ceci et MariaDB en dispose ; et de la même manière, il peut chiffrer/déchiffrer des enregistrements de table. Néanmoins, la mécanique reste la même que précédemment : nous chargeons toute la table pour ensuite déchiffrer chaque enregistrement.

A travers Symfony, des bundles permettent de faire ce genre de chiffrement au niveau des données : DoctrineEncryptBundle (https://github.com/vmelnik-ukraine/DoctrineEncryptBundle) par exemple, ce dernier utilise Libsodium. Néanmoins, la même mécanique que précédemment est utilisée.

Afin de répondre à cette problèmatique de recherche sur des données chiffrées, l'idée va être d'utiliser le hash des champs sur lesquels nous effectuons une recherche. Il faut alors créer une table de mapping qui contiendra le hash de chaque combinaison possible du/des champ(s) de recherche et qui sera reliée à l'enregistrement par une clé étrangère.

Exemple :

Nom et prénom en entrée : Jean-Michel Dupont

Hash de la table de mapping : (avec MD5 par exemple)

jean --> b71985397688d6f1820685dde534981b

jeanm --> e776e96f15b0b439b1c50555d40b33b4

...

jeanmicheldupont --> 0d0dfb17061853c9086c156e6f651cfb

Article de recherche décrivant cette technique : https://www.sitepoint.com/how-to-search-on-securely-encrypted-database-fields/ et dépôt la mettant en oeuvre.

Jeudi 22/10 après-midi

What is Sylius and why should you know it

Sans transition, direction la seconde conférence sur Sylius qui était particulièrement attendue par l'équipe. Mateusz Zalewski nous présente la plateforme de e-commerce et fait un tour d'horizon des possibilités. L'objectif de Sylius est de répondre aux problématiques courantes dans le monde du e-commerce. La plateforme se distingue par sa qualité, on y retrouve ainsi beaucoup de tests (TDD, BDD) avec automatisation, le respect des normes, le tout sous Symfony ! L'environnement de développement est donc optimal. L'API de Sylius permet l'intégration d'un ERP, d'un PIM de POS… Pour finir cette conférence le speaker a mis en avant le côté « bundle » de Syliu ; par exemple, il est ainsi possible de récupérer le bundle adresse de la plateforme afin de l'utiliser dans un autre projet ! - Florent

Performances : mais que se passe-t-il après le backend ?

Cette conférence permet de mettre en lumière l'impact du backend sur les performances d'un site. Jean-Pierre Vincent nous présente des outils et les bonnes pratiques afin d'analyser les performances de son site et de trouver des méthodes pour améliorer la vitesse de chargement. La première approche se situe au niveau du réseau. L'analyse des trames, la mise en place de HTTP 2 ou de TLS 1.3 sont des points permettant une optimisation du site. Côté Front, il est possible de se baser sur des outils comme Webtestpage, la console de développement de Google ou bien Webpack Bundle Analyzer, l'objectif ici est d'analyser en profondeur l'impact du Front sur les performances. Pour conclure cette conférence : améliorer la vitesse d'un site c'est analyser les métriques, connaitre les utilisateurs et adopter une stratégie pour optimiser ! - Florent

Utiliser le protocole Vulcain pour créer des API REST ultra-performantes

Vulcain est un protocole visant à améliorer les performances des API REST grace aux nouveautés présentes en HTTP/2 (et HTTP/3). Il a pour vocation de régler 2 gros défauts des API REST en HTTP/1 : l'underfetching (pas assez de données en une requête) et l'N+1 (attendre la fin d'une requête pour en lancer une autre). Mais depuis HTTP/2 les anciennes problématiques de REST s'effacent grâce :

  • Au multiplexing : dans une seule connexion TCP, on peut envoyer autant de requêtes en parallèle (pour récupérer des petits documents atomiques par exemple)
  • Server Push : La récupération du CSS / JS sera directement envoyée (en parallèle) par le serveur lors de la récupération de l'index.html.

Vulcain va proposer de régler ces problèmes avec un principe assez simple : lors de la requête principale, on indique en header les ressources que l'on veut preload. A partir de là, le serveur va push en parallèle ces ressources et elles seront donc directement disponibles par la suite. Cela a pour avantage de respecter les principes de REST ainsi que de garder toutes les propriétés du protocole HTTP (cache / autorisation…).
L'idée de ce protocole est intéressante et nous ne manquerons pas d'étudier ses possibilités dans nos futurs développements. - Louis

C'est avec cette conférence que pour nous se termine cette première journée de ce forum PHP 2020. Nos retours sur la deuxième journée se passent ici.

Conférence 2020 Forum PHP AFUP PHP Forum PHP 2020 Veille technique PHP