Retour sur le Symfony Live 2020

Fabien

Fabien, Architecte web 9 octobre 2020

Les 23 et 24 septembre, deux de nos envoyés spéciaux se sont rendus au Symfony Live 2020 à Paris : une conférence de référence qui permet de découvrir toutes les nouveautés sur notre framework de prédilection.

Voici une petite sélection de conférences, pour vous tenir informés de certaines nouveautés mais également pour vous donner envie de nous y rejoindre dès la prochaine édition !

Keynote d'ouverture

Fabien Potencier - Créateur du framework Symfony
Lien vers conférence

La keynote d’ouverture présentée par le créateur de Symfony Fabien Potencier était centrée sur la future version 5.2 du framework. Des rappels ont également été faits sur la version actuelle.

Les évolutions de Symfony

Parmi les évolutions des composants Symfony, on a noté :

-- La console : 

  • l’ajout / gestion des True Color
  • un rappel de l’utilisation de SingleCommandApplication
  • l’utilisation de Signals

-- Le composant Translation a également évolué avec :

  • l’utilisation du format ICU message
  • la possibilité d’utiliser le pseudo localisation translator pour simuler la gestion des accents
  • l'ajout de la class Translatable pour simplifier l’appel aux traductions

-- Le composant Form a été amélioré et donne la possibilité de mapper les données en utilisant une fonction de callback.

-- Le récent composant HttpClient continue sur sa lancée avec : 

  • plus de possibilités de configuration lors d'une nouvelle tentative d’appel HTTP en cas d’erreur
  • une nouvelle fonctionnalité avec EventSourceHttpClient permettant de gérer les server-sent events

Nouveautés des composants expérimentaux de Symfony

Fabien nous a également présenté certaines nouveautés des composants expérimentaux de Symfony.

-- Pour le composant Uid :

  • ajout du support dans le serializer
  • gestion des Uid dans Doctrine

-- Le support de Notifier est étendu avec l’ajout de nombreux providers (GoogleChat, Esendex…).

-- Le composant Mailer comble ses manques avec : 

  • des modifications sémantiques et des ajouts de possibilités de configuration (comme les headers)
  • une meilleure sérialisation, plus concise
  • l'ajout du support de DKIM

Des nouveaux composants

Nous avons aussi pu prendre connaissance de nouveaux composants :

  • Le composant Semaphore permet d’autoriser un processus à accéder à une ressource (contrairement au composant Lock qui permet à un seul processus d'accéder à une ressource).
  • Le composant Lock permet maintenant de gérer un seul processus en écriture tout en permettant plusieurs processus en lecture sur une ressource.
  • Le composant RateLimiter : composant qui utilise les composants Lock et Semaphore pour gérer un nombre de connexions sur des intervalles de temps.

Améliorations générales et sécurité

Concernant les améliorations générales du framework :

  • le code du squelette qui lance le Kernel a été simplifié (par exemple les trusted_proxies peuvent être gérés en config)
  • le cache HTTP activable depuis la configuration

La gestion de la sécurité est en pleine réécriture pour ajouter de nouvelles fonctionnalités comme :

  • gérer des limites de tentatives de connexion sur un intervalle de temps
  • davantage d’events disponibles
  • le rôle ROLE_ANONYMOUS remplacé par PUBLIC_ACCESS
  • et d’autres à venir (magic login link, 2fa)

Enfin Symfony est en route pour PHP 8 avec l’utilisation des nouveaux attributs pour remplacer certaines annotations.

    My #Symfony 5.2 slides from #symfonylive keynote https://t.co/wPmCn18BDX

Monolithe modulaire : Pourquoi ? Comment ?

Timothée Barray - Développeur - French Hospitality
Lien vers la conférence

Timothée nous a fait un retour d’expérience sur l’architecture Monolithe modulaire et ses différences avec l’architecture microservices.

Cette architecture permet une agilité dans le développement et une plus grande flexibilité grâce à une meilleure séparation des données séparées par module. Cela est très utile pour un projet dont on sait que les besoins vont évoluer.

La complexité réside dans l’organisation par module et dans la détection de leurs frontières. Cela est dû à la contrainte qu’aucun appel de classe ne peut avoir lieu entre modules. L’outil Deptrac permet de contrôler les dépendances entre les différents modules.

Les modules peuvent être ouverts via des contrats (gateway) qui permettent d’appeler des services d'autres modules. C’est le rôle des ACL (Anti Corruption Layer) du principe DDD (Domain Design Pattern).

Finalement Symfony permet une configuration claire en important les fichiers de configurations YAML par module.

Les slides de ma conf "Monolithe Modulaire : Pourquoi ? Comment ?" au #symfony_live sont dispo en ligne : https://t.co/o3mtLyb596

Mettre la cryptographie au service de vos apps Symfony

Nicolas Grekas - Développeur Symfony

Nicolas - l’un des principaux développeurs du framework Symfony - nous a présenté les enjeux de sécurité dans nos applications web, notamment en matière de cryptographie.

La cryptographie peut avoir comme objectif :

  • le hachage
  • le chiffrement
  • gérer l’intégrité et la confidentialité
  • stocker et transmettre des données

Une piqûre de rappel a été faite sur la différence entre le hachage et le chiffrement (le deuxième étant réversible).

Il nous a également présenté :

  • l’évolution des méthodes de hachage de mot de passe : md5 et sha1 qui ne sont plus à utiliser, bcrypt et argon2 qui sont recommandées
  • la lutte menée contre la méthode rainbow table (table de mot de passe par rapport à une empreinte). D’ailleurs, saler un mot de passe permet d’allonger le mot de passe à hacher et donc demande davantage de puissance pour le déchiffrer.
  • les deux technologies bcrypt et argon 2 qui permettent de définir combien de capacité mémoire (mais impact sur le temps de traitement) sera utilisée pour hacher le mot de passe, pour rendre le hachage plus complexe.
  • le système de migration de mot de passe de Symfony avec l’interface PasswordUpgraderInterface. Avec une configuration de l’algorithme en auto dans la configuration de l’encoders, Symfony utilisera l’algorithme le plus adapté à la plateforme.

Nicolas nous a présenté une conférence très intéressante sur la sécurité des applications Symfony même si les risques peuvent venir de bien différentes sources (configuration serveur, mot de passe écrit en physique…).

WebAuthn – Technologie et intégration dans un projet Symfony

Stefan Richter - Développeur - Webnet

Stephan nous a présenté Webauthn, une technologie qui est un standard du W3C. Elle propose une interface d’authentification aux applications web avec des clés asymétriques.

Le principe est de pouvoir se passer de mot de passe afin de simplifier l'expérience utilisateur. Pour cela, la clé privée est stockée dans un jeton et la clé publique est partagée avec les applications. Le jeton peut être stocké sur une clé USB, Bluetooth, NFC ou même une vérification biométrique.

Cette technologie suit la nouvelle norme FIDO 2 qui génère une paire de clé différente selon les services.

Webauthn est une API JavaScript, vous pourrez retrouver sa documentation ici : https://webauthn.guide/

Pour l’implémentation dans une application Symfony, Stephan a introduit deux bundles dont web-auth/webauthn-symfony-bundle qui est davantage recommandé.

WebAuthn est une technologie intéressante, néanmoins certains freins ralentissent encore sa démocratisation (par exemple : incompatibilité avec Internet Explorer, peu de sites connus l’ont mis en place).