Deamonspace

Reconnu d'utilité publique depuis 1804

Symfony Live – Paris 2016 : mes retours

| Aucun commentaire

Pile deux ans après, les 7 et 8 avril 2016, je suis retourné au Symfony Live à la Cité internationale universitaire de Paris, donc comme il y a 2 ans, voici mon retour de ce que j’ai pu y voir 🙂

Symfony Live Paris 2016

Jeudi 7 avril

Monolith Repositories with Git par Fabien Potencier

Twitter Github Site web

Fabien Potencier a ouvert comme d’habitude le Symfony Live par une conférence portant sur la gestion des dépôts monolithiques. Il rappelle que Symfony est un agrégat de plusieurs composants configurés et « assemblés » pour n’en faire qu’un seul.

Pour cela, chaque composant ayant son cycle de vie propre, il est nécessaire de tous les synchroniser pour garantir la stabilité de Symfony à tout moment. La commande git subtree était alors lancée chaque nuit pour « séparer » le framework en ses différentes briques, rejouer tous les commits et vérifier que tout était OK. Si au début cela fonctionnait, rapidement l’opération s’est avérée être longue : plus de 30 composants / bridges / bundles tiers à rejouer pour au moins 2 versions différentes (2.* et master), soit ~7h d’exécution, pour dépasser la journée lorsque plusieurs versions de Symfony ont été maintenues de front. Cette solution n’était donc plus viable.

Après avoir fait quelques optimisations de la commande (voir cet article de 2012 expliquant le problème + les optims), Fabien a recréé un outil en C pour faire ce que fait git lors du split, mais sans les contraintes liées à l’outil (stockage de cache coûteux en temps et espace, forks en boucle qui ralentissaient le système etc), pour arriver au même résultat, mais en quelques minutes, ce qui permet de parler de quasi temps réel.

Pour illustrer son propos, il nous a proposé de merger une pull request qu’il avait mis en attente spécialement pour son speetch, il nous fait alors la démo en live depuis son PC.

Tout est automatisé, jusqu’aux remerciements au contributeur 🙂 :

Validation et merge de PR chez Sensio

Il a également pris le temps de nous expliquer ce qu’il se cache réellement derrière le code d’un commit Git (cet article le résume très bien si ça vous intéresse).

Ce qu’il faut retenir :

  • SensioLabs fait face à des problématiques similaires à celles de grands groupes comme Google ou Facebook.
  • Ils ont recodé l’équivalent d’une commande git, mais en beaucoup plus rapide.
  • Ils maîtrisent de bout en bout l’intégration continue de Symfony.

Slides de la présentation : pas de slides disponibles à ce jour 🙁

Guard dans la vraie vie par Jérémy Romey (aka jeremyFreeAgent)

Twitter Github

On est entré dans le vif du sujet, avec plein de code, dans cette conférence. On nous a parlé de Guard, un composant de Symfony un peu méconnu et pourtant très pratique, présent dans Security (depuis la version 2.8).

Jérémy Romey est revenu sur les différentes façons de loguer un utilisateur sur Symfony, rendues faciles à implémenter avec Guard.

Détailler ici ce qui a été dit revient à lire la page de documentation dédiée sur le site de Symfony.

Pour l’anecdote, le mot « sha » a été très fréquemment prononcé (comme dans la conférence précédente), ce qui a provoqué quelques réactions :

Ce qu’il faut retenir :

  • Guard simplifie énormément l’authentification avec Symfony.
  • « sha1 » est le système de hash utilisé par défaut, mais sans sel ni itération, il génère toujours le même hash, il faut lui préférer des algorithmes plus puissants (comme Bcrypt) => On y reviendra dans les conférences sur la sécurité plus loin.

Slides de la présentation : pas de slides disponibles à ce jour 🙁

R2D2 to BB8 par Vincent Chalamon & Guillaume Voisin

Vincent Chalamon :Twitter Github Site web             Guillaume Voisin :Twitter Github

Nos deux présentateurs sont lead développeurs respectivement chez Les-Tilleuls.coop et LaFourchette. Ils sont venus nous parler de la migration continue d’un vieux projet en Symfony 2.0 vers Symfony 3.

En premier lieu, il convient d’étudier à fond l’existant, qu’ils nomment le legacy, afin d’évaluer l’ampleur des fonctionnalités à préserver, jeter ou faire évoluer. C’est leur périmètre technique. Ils ont alors utilisé Api Platform, produit par Les-Tilleuls, afin de s’abstraire de la partie données et refondre en profondeur l’aspect métier. Pour la continuité de service, le code legacy a été déplacé vers un LegacyBundle.

Dans un second temps, il a fallu migrer les données de l’ancien format vers le nouveau. Pour un « petit » projet, cela peut paraître assez simple, or dans leur cas il y avait une importante dette technique, beaucoup de dépendances entre les briques de leur application, des features pas vraiment migrables, des bundles tiers obsolètes donc un problème de mise à jour. Mais le problème principal était la masse importante des données à migrer. En effet, le script de transition de l’ancien SI vers le nouveau prend 9 jours pour se terminer, en coupant l’accès à l’application, ce qui n’est pas acceptable. Il a donc été décidé de procéder par étapes.

Etant donné l’importance du projet, il a également été question d’abandonner l’ORM Doctrine pour une spécialisation des requêtes pour MySQL (aucun risque de changement de SGBD, comme dans la plupart des projets).

Leur présentation très Star Wars pour le style (c’était un thème récurrent cette année), commençait cependant par une citation littéraire :

« Lorsqu’une chose évolue, tout ce qui est autour évolue de même. »

Paulo Coelho

Ils terminent sur quelques recommandations pour ce type de projet, en illustrant leur propos par leur vécu.

Ce qu’il faut retenir :

  • Lors d’une migration d’application, il faut procéder à une étude approfondie de l’existant.
  • Procéder par étapes, ne pas chercher à tout transformer d’un seul coup.
  • Toujours tester le résultat en conditions réelles, pour s’assurer de ne pas avoir de régressions.

Slides de la présentation : https://fr.slideshare.net/VincentCHALAMON/r2d2-to-bb8-60662855

PHP Meminfo ou la chasse aux memory leak par Benoit Jacquemont

Twitter Github Site web

Le conférencier a axé sa présentation sur une démonstration par l’exemple. Il a d’emblée rappelé ce qu’est vraiment une fuite mémoire, puis nous a donné divers exemples (voir les slides) expliquant comment un script simple avec une référence cyclique (Objet A qui possède un attribut Objet B, lui-même ayant une référence sur A => liste doublement chaînée) mal gérée peut conduire à une explosion de consommation de mémoire ainsi que des temps d’exécutions très longs. Il précise également que le Garbage Collector qui a été mis en place à partir de PHP 5.3, est censé récupérer la mémoire efficacement pour les références cycliques. Avec un exemple assez simple, il nous démontre que l’action du Garbage Collector peut être complètement caduque si les objets traités sont nombreux et encore utilisés. L’effet devient même pervers car le ramasse-miettes se déclenchant aussitôt un nombre d’objets donné (10000) atteint, il consomme de la mémoire, et cela de plus en plus fréquemment.

Arrivé à ce constat, il nous présente alors son outil PHP Meminfo, disponible sur Github, et nous explique dans les exemples précédents comment l’utiliser et l’exploiter dans les codes problématiques. C’est une alternative efficace à des outils plus anciens comme XDebug, car il est capable de dire à chaque instant quel objet est en mémoire, combien il en prend, et comment il est utilisé, ce qui permet de faire « la chasse aux memory leak » 🙂

Il termine sa présentation sur quelques conseils pratiques concernant l’utilisation de la mémoire dans les scripts.

Ce qu’il faut retenir :

  • Les fuites mémoires peuvent conduire à des ralentissements conséquents et durables de l’application.
  • XDebug est un outil historique, mais insuffisant pour ces besoins, de nouveaux outils existent.
  • Monitorer ses applications régulièrement reste une priorité.

PHP Meminfo sur Github : https://github.com/BitOne/php-meminfo (le support de PHP 7 a été annoncé très prochaine par le speaker)

Slides de la présentation : https://speakerdeck.com/bitone/hunting-down-memory-leaks-with-php-meminfo

Retour d’expérience Reactive Architecture et Microservices : Comment découpler mes applications ? par Fabien Meurillon

Twitter Github Site web

Un marronnier dans les conférences qui ont déjà pu être données dans les Symfony Live ou d’autres conventions : comment découpler les applications et quelles solutions ont été mises en place ?

Le sujet du jour est la mise en place d’une architecture microservices (SOA) chez un gros client (Auchan), avec une énorme dette technique et des applications custom et très anciennes.

Pour rappel, un microservice est une action simple portant sur un domaine métier, qui sera une petite brique applicative de l’ensemble. Il va exploiter pour cela une API langage-agnostique.

Afin de garantir un maximum de cohérence dans son projet, il a choisi de suivre le Reactive Manifesto et d’en appliquer les grands principes :

  • Disponibilité (responsive) : Pouvoir répondre rapidement en toute circonstance.
  • Résilience (resilient) : Renvoyer un message cohérent et lisible par l’utilisateur, même en cas d’erreur.
  • Souplesse (elastic) : Rester réactif même en cas de forte charge.
  • Orienté message (message-driven) : On utilise des messages asynchrones (utilisation de queues)

La première étape a été d’adopter un format d’échange simple, il a pris JSON, ainsi qu’un protocole de transport pour les données échangées : HTTP. C’est donc tout naturellement qu’on en vient à faire une API REST.

Pour l’aspect messages (message driven), il a tenté plusieurs approches, qui ne satisfaisaient pas toutes les conditions requises du manifeste réactif, il a alors choisi de s’orienter vers l’ESB Talend, afin de garantir l’asynchronisme entre les services.

Ce qu’il faut retenir :

  • La mode est aux microservices (comme en témoigne cet article du mois d’août 2015).
  • La refonte d’un SI très ancien requiert une certaine rigueur, le manifeste réactif est un moyen de le garantir.
  • Son architecture reste imparfaite : il utilise un « bundle ambassadeur » commun à tous les services, ce qui introduit fatalement de la dépendance…

Slides de la présentation : https://fabien.meurillon.org/sfLive2016

Le réveil du Workflow par Grégoire Pineau

Twitter Github Site web

Nouvelle présentation sur fond de Star Wars 😀

Le sujet est un composant arrivé tardivement dans Symfony et toujours à l’état de feature proposée en pull request. Le projet avait été initié en 2013 par Fabien Potencier, repris ensuite par le speaker, avant d’être laissé un peu à l’abandon jusqu’en février 2016 où il s’est remis à travailler en revoyant son architecture.

Voir la PR ici.

Il s’est intéressé à ce qui se faisait déjà, entre machines à état et réseaux de Pétri, avant de porter son choix sur les réseaux de Pétri, et le modèle Workflow Net. La seconde partie de sa conférence a été une explication du fonctionnement de ce modèle, plus quelques exemples.

Côté code, il s’est attaché à donner l’essentiel pour permettre un workflow simple à double validation de contenu par deux types d’utilisateurs différents, on y retrouve Guard, parfaitement intégré à l’ensemble, la config, les templates…

Il termine sur une petite démo, qu’on peut retrouver ici.

Pour la petite histoire, la version qu’il a utilisée lui a donné une jolie erreur 500, mais rassurez-vous, ça fonctionne !

Ce qu’il faut retenir :

  • Le composant Workflow est actuellement une lacune dans Symfony.
  • La solution proposée est assez souple, demande beaucoup de configuration et assez peu de code pour les transitions d’étapes.
  • Tout workflow doit impérativement être commencé sur une feuille de papier pour savoir d’emblée ce qu’on cherche à implémenter.

Slides de la présentation : https://speakerdeck.com/lyrixx/le-reveil-du-workflow

ElasticSearch chez BlaBlaCar par Olivier Dolbeau

Twitter Github Site web

Le sujet parle de lui-même, le speaker, qui travaille chez BlaBlaCar, vient nous présenter comment ElasticSearch est utilisé par le site. Cela va bien évidemment des requêtes des utilisateurs recherchant un covoiturage, impliquant de multiples paramètres, mais aussi la remontée d’alertes selon des mots-clés présents dans les tickets (efficace pour filtrer tout utilisateur dont les retours utilisateurs contiennent des mots comme « accident », « ivresse » ou encore « attouchement »…)

Il a enchaîné par une présentation rapide de l’infrastructure chez BlaBlaCar, permettant de supporter le trafic (5 millions de recherches par mois), avant de revenir à la partie recherche à proprement parler.

La présentation était intéressante dans le sens où on nous a présenté une utilisation concrète et poussée d’ElasticSearch, mais le public (dont moi-même) a eu la sensation de seulement survoler le sujet, on attendait un peu plus, comme une implémentation concrète, seulement les messages JSON nous ont été présentés.

Ce qu’il faut retenir :

  • ElasticSearch est un outil très puissant dans un SI proposant quantité d’informations et souvent interrogé, il est un digne cousin de Apache Solr.

Slides de la présentation : https://speakerdeck.com/odolbeau/elasticsearch-chez-blablacar

Performance au quotidien dans un environnement Symfony par Xavier Leune

Twitter Github Site web

Venu de chez CCM Benchmark (qui gère notamment Comment ça marche ou Le Journal du Net), le speaker est là pour nous parler des contraintes draconiennes de performance imposées sur les sites qu’ils gèrent (ils sont 4ème en terme d’audience en France, derrière Google, Microsoft et Facebook).

Pour cela ils se sont imposés des métriques très sévères, concrètement, par page, et au maximum :

  • 100 ms pour la génération
  • 8 Mo de mémoire allouée
  • 10 requêtes en base

Au moment du choix du framework qui allait porter leurs projets, Symfony n’avait clairement pas la palme, à cause de performances catastrophiques dues à l’ORM Doctrine. Cependant, la popularité et la maturité du framework les a tout de même poussé à l’adopter.

Pour contrer le principal point de blocage, à savoir l’ORM (pour rappel, ils doivent pouvoir gérer jusqu’à 100 000 requêtes / seconde), ils s’en sont tout simplement débarrassés. Ils sacrifient ainsi l’abstraction de base, mais cela est un non-problème dans leur contexte car il n’est pas prévu qu’ils changent leur SGBD, et ils veulent que les développeurs sachent ce qu’ils sont en train de faire, et donc s’affranchissent des méthodes de requêtes trop abstraites par moment. Cependant, ils ne sont pas revenus aux classes DTO de PHP, mais on réécrit un « no-RM », très light, qu’ils ont baptisé Ting. Cela a déjà amélioré les performances de manière conséquente, et remis Symfony au même niveau que ses concurrents.

Une fois ce gros souci réglé, ils ont balayé les autres points d’optimisation possibles dans Symfony, ainsi que des bonnes pratiques :

  • La gestion du cache et l’utilisation des ESI pour diminuer les temps de chargement. Ils attirent notamment notre attention sur une mauvaise pratique du composer install en prod, qui force une compilation, et déploie les assets en liens symboliques et non en hard, ce qui accroît légèrement leur temps de chargement (à l’échelle de plusieurs millions d’accès auxdits fichiers, cela représente une perte importante).
  • Utilisation des outils dédiés à l’intégration continue, TU, Behat, etc.

Il termine par une présentation et la mise en place de Blackfire pour le suivi des performances.

Ce qu’il faut retenir :

  • Symfony a acquis une maturité suffisante pour avoir la confiance de grands groupes.
  • Doctrine (et les ORM en général) ne sont pas adaptés aux gros projets, dès que les performances deviennent critiques.
  • Ting est une excellente alternative.
  • Il existe de bons outils de suivi des performances, afin de garder un œil sur ce qu’il se passe.
Institut de l'estimation au doigt mouillé

Pensez-y dans vos prochaines propals !

Slides de la présentation : https://fr.slideshare.net/xavierleune/performance-au-quotidien-dans-un-environnement-symfony

Vendredi 8 avril

Keynote – Pourquoi se faire confiance ? par Mathieu Nebra

Twitter Github Site web

Cette conférence était vraiment en décalage par rapport aux autres, car peu ou pas de technique n’a été abordée.

Pour ce qui est du speaker, Mathieu Nebra, plus connu sous le pseudo M@theo21 du temps du feu Site du zéro, devenu depuis OpenClassrooms et dont il est l’actuel gérant, il a choisi de nous parler de sa vision du monde de l’entreprise aujourd’hui.

Je tiens à préciser, tout comme lui-même l’a fait, qu’il ne connaît que le monde de la petite entreprise, et n’a jamais travaillé au sein d’un grand groupe.

On a eu droit à une rétrospective sympathique de l’histoire du Site du zéro, puis de son passage à OpenClassrooms, histoire de nous renvoyer pour la plupart d’entre nous, dans une lointaine jeunesse J, cela afin d’illustrer l’évolution d’une toute petite équipe que 4-5 personnes vers une vraie entreprise d’une cinquantaine d’employés

Il a commencé à mettre en opposition le monde « classique » de l’entreprise, qui fonctionne sur la base d’hypothèses comme « les collaborateurs sont flemmards », « travaillent juste pour l’argent » ou « sont remplaçables » (la théorie X), et la vision basée sur la confiance, la théorie Y, avec un réel investissement des collaborateurs. Un article intéressant traitant de ces théories est paru d’ailleurs récemment.

En reprenant comme exemple sa propre société, il a entrepris de nous donner les lignes directrices à la mise en place de cette autre organisation basée sur la confiance, à base de transparence de l’information, la résolution des conflits au plus tôt, et la délégation des responsabilités. On y retrouve des principes Agile et  un plébiscite du dialogue ouvert (discussions en tête à tête, parfois hors du cadre de l’entreprise, des feedbacks…).

Ce qu’il faut retenir :

  • Le modèle de la plupart des entreprises français est contre-productif.
  • Impliquer les collaborateurs dans ce qu’ils font est bon pour les performances et l’ambiance de travail.
  • Ce modèle basé sur la confiance est tout de même plus facile à appliquer dans des sociétés à taille réduite.

Cela dit, sans aller contre le message délivré par Mathieu Nebra, il apparaît que cette vision idéale de l’entreprise peut être difficilement envisageable dans de grandes structures, notamment à hiérarchie n*.

Slides de la présentation : https://speakerdeck.com/openclassrooms/pourquoi-se-faire-confiance

PSR-6 & Symfony Cache : de la perf en standard par Nicolas Grekas

Twitter Github

Nicolas Grekas revient cette année pour nous parler de la norme PSR-6 et la gestion du cache de Symfony.

Dans un premier temps, il nous redonne le contexte, nous parle du PHP-FIG (PHP Framework Interoperability Group), qui est un regroupement de tous les grands acteurs du monde PHP (PEAR, Symfony, Drupal…), un groupe de travail chargé de définir les PSR (pour PHP Standards Recommendations), fixant les règles de codage et couvrant plusieurs sujets. Actuellement, sans compter la PSR-0 portant sur l’autoloading qui a été dépréciée, il existe 6 PSR validées par le groupe :

  • PSR-1 : Basic Coding Standard, les standards de base pour le code (balises, charset…).
  • PSR-2 : Coding Style Guide, une extension de PSR-1, mais qui va s’attacher plus au code en lui-même et à son formattage.
  • PSR-3 : Logger Interface, pour tout ce qui touche la façon de tenir ses logs.
  • PSR-4 : Autoloading Standard, qui est une réécriture enrichie de la PSR-0.
  • PSR-6 : Caching Interface, pour la gestion des caches (on y reviendra)
  • PSR-7 : http Message Interface, pour tout ce qui touche à la représentation de message via le protocole HTTP.

La liste exhaustive ainsi que les spécifications détaillées sont disponible sur le site du PHP-FIG.

Le problème avec cet organisme, c’est que les besoins traités dans les PSR, étant fixés par les grands acteurs du marché, ne sont pas toujours représentatifs, et les désaccords sont légion. Il nous explique notamment que le fait d’ouvrir une PSR peut être vu comme un « acte politique » dans le but de bouleverser les normes établies, pour imposer un nouveau standard (ce qui semble être le cas pour la PSR-7).

Dans le cas de la PSR-6, bien que validée, il apparaît que les discussions sont ardues depuis 3 ans, et qu’il reste des points à éclaircir. Certains acteurs ne sont pas du tout satisfaits de ce qui a déjà été fixé, comme le cas d’un responsable du projet Doctrine (qui ne respecte pas du tout la norme en matière de cache), et qui s’est fendue d’une longue série de tweets très techniques pour le faire savoir.

Nonobstant, Symfony a déjà commencé l’intégration de PSR-6 comme standard pour sa gestion du cache. Cela passe actuellement par 2 interfaces assez simples, l’une pour l’objet à cacher et la seconde pour le pool de cache (les ressources permettant le cache elles-mêmes). Cela dit, cette implémentation est vouée à évoluer selon ce qui sera décidé pour la PSR-6…

Ce qu’il faut retenir :

  • PHP-FIG tente de définir un ensemble de normes, mais souffre d’un manque de cohésion.
  • La PSR-6 est validée mais plus proche de l’état « brouillon ».
  • Symfony a déjà anticipé cette norme en l’implémentant dans son propre code.

Slides de la présentation : https://speakerdeck.com/nicolasgrekas/psr-6-and-symfony-cache-de-la-perf-en-standard

Sécurité web: pirater pour mieux protéger par Alain Tiemblo

Twitter Github Site web

Nouvelle conférence par un intervenant de chez BlaBlaCar, spécialiste de la sécurité.

Il commence par une anecdote personnelle, où en remplissant un champ hidden d’un formulaire web sur un site de la SNCF, il avait pu obtenir autant de billets qu’il voulait, alors qu’il n’avait droit et n’en avait payé qu’un. Par cette petite histoire, il nous rappelle que la sécurité est un problème quotidien et que beaucoup de sites / applications souffrent de lacunes qui peuvent conduire à des pertes chiffrées.

Il fait ensuite une rétrospective des problèmes de sécurité courants, et donne des conseils pour ne pas se faire avoir :

  • Hash de mot de passe : Ne plus se limiter au simple hash, dont les empreintes sont souvent connues et étudiées, mais ajouter un sel, des itérations, ou adopter des algorithmes plus évolués comme Bcrypt (qui génèrent des hashs différents pour une même chaîne de caractères).
  • Brut force sur le reset de mot de passe : Toujours renvoyer une réponse positive, même si l’email n’existe pas, et limiter la procédure de réinitialisation dans le temps (pour protéger votre serveur).
  • Brut force sur le login : Le speaker trolle un peu Fabien Potencier et son crawler utilisé dans les TU Symfony, qui rend cette opération facile J. Il préconise de simplement limiter le nombre de tentatives dans le temps, et de délayer les essais, même si l’email n’existe pas.
  • Cross-Site Scripting (XSS) : Cela va de la simple blague (je vous laisse regarder le détournement très classe du site de Christine Boutin dans ses slides) au vol d’informations si l’utilisateur rentre des données sensibles comme ses coordonnées bancaires dans le cas de BlaBlaCar. Il conseille d’utiliser massivement les filtres offerts par Twig, qui épurent le code afin d’éviter ce genre d’injection, ainsi que d’utiliser uniquement les cookies HTTP (ce qui empêchera le JS d’accéder aux cookies).
  • Clickjacking : C’est un procédé malin et sournois qui consiste à créer une page lambda où vous aurez gagné par exemple un voyage, avec un bouton de validation bien voyant, et de superposer une page du site attaqué (par exemple celle de validation de changement d’informations bancaires préremplie par l’attaquant) en transparence. La victime croit cliquer sur le bouton (en fait elle va valider le formulaire de la page attaquée), et il ne se passe rien. Or si par malheur la victime était loguée sur le site attaqué, elle aura validé par erreur ce que l’attaquant visait à faire valider. Le speaker préconise de modifier les headers HTTP pour interdire le site de s’afficher dans une iframe ailleurs que sur le site lui-même, voire nulle part.
  • SMS verification hacks : Du pur social engineering, vous recevez un SMS avec un code (pour valider un changement de données sensibles par exemple), puis un second SMS d’une personne prétendant qu’elle s’est trompée en indiquant votre numéro au lieu du sien, et vous demandant ledit code. Simple et efficace. Pour cela il n’a pas vraiment de solution face à la crédulité des gens, il préconise de laisser le numéro d’envoi tel quel sur le téléphone, et ne pas chercher à afficher le nom de la société, car c’est souvent comme cela que l’attaquant va essayer d’endormir sa victime en lui présentant un nom qu’elle connaît pour la rassurer.
    Dans un autre registre, pour contrer le brut force du formulaire de validation du code reçu (à fortiori si c’est un code numérique), les mêmes règles que pour le brut force du login s’appliquent.
    Il met en garde également contre les sites qui fournissent des numéros jetables (à la manière de Yopmail ou Jetable pour les mails), et nous indique qu’il existe des instances de validation de numéros de téléphone, leurs APIs sont cependant payantes.
  • Cross-Site Request Forgery : La classique validation de formulaire depuis un site extérieur au site attaqué (pour par exemple modifier des informations du compte utilisateur, pour peu que celui-ci soit connecté au site attaqué). Il nous parle alors des tokens CSRF, pour éviter cela, et nous rappelle qu’ils sont déjà présents par défaut dans Symfony.
  • Website crawling : Selon ce que l’attaquant cherche à faire, il va créer plusieurs sessions à la fois dans un laps de temps réduit (pour constituer une base données avec de l’information réelle, voler du contenu, etc). Le speaker nous dit qu’il n’y a pas de solution toute faite, c’est un peu du cas par cas, et qu’il faut veiller à ne pas pénaliser les utilisateurs normaux, ou ceux qui utiliseraient un proxy. Il conseille de mettre en place divers outils pour détecter des activités anormales, comme une image non soumise au cache, qui comptera le nombre de fois où elle est chargée par exemple.

Ce qu’il faut retenir :

  • La sécurité est un enjeu majeur pour tout site (comme BlaBlaCar) détenant de l’information de valeur.
  • Il existe de multiples façons d’attaquer un site, mais autant de s’en prémunir.
  • Un contrôle fin de l’infra et des briques sécurité de son application permet de contrer les attaques les plus faciles, mais il n’y a pas de solution miracle contre la bêtise ou la crédulité.

Slides de la présentation : https://github.com/ninsuo/slides

Aller plus loin avec Doctrine2 par André Tapia & Amine Mokeddem

André Tapia :Twitter Github              Amine Mokeddem :Twitter

Les deux intervenants, qui viennent de chez WebNet, viennent nous parler de plusieurs aspects intéressants de Doctrine, et comment les mettre en place.

Ils commencent par l’extension du vocabulaire DQL, en ajoutant des fonctions particulières non supportées par défaut, ici par exemple IFNULL(). Ils nous donnent le code pour l’intégrer dans le langage, la configuration et les classes qui la définissent. Ils précisent que des bundles existent et qui enrichissent le langage, en particulier DoctrineExtensions.

Ils continuent leur conférence sur les évènements liés aux entités (prePersist, postPersist, postLoad…). Ils donnent quelques exemples de mise en pratique, qui je pense étaient déjà connus de toute personne ayant déjà fait un projet avec Doctrine. Ils refont également une passe sur les subscribers qui permettent d’auto-alimenter certaines infos dans l’entité (date de création, etc). Au passage, notons que le DoctrineExtensions, mais de stof cette fois-ci, donne également des subscribers génériques.

La troisième partie de la conférence porte sur l’attention à porter au code pour optimiser les performances. A partir d’un exemple concret de mauvais code qui prend 23s à s’exécuter tout en consommant plus de 200Mo de mémoire, ils donnent plusieurs astuces d’optimisation, pour obtenir la même chose en 158ms et 4,50Mo. L’intérêt de cette démonstration est de prouver que l’ORM n’est pas toujours responsable de la lenteur de certains traitements, la façon de l’utiliser joue aussi grandement. Pour terminer sur les performances, ils nous parlent également des requêtes partielles dans des cas assez particuliers.

La dernière partie du speech est une revue de toutes les astuces permettant de se faciliter la vie avec Doctrine :

  • Les hydrateurs, ou comment préformater le retour d’une query afin de pouvoir l’exploiter directement.
  • Les filtres avec leurs listeners pour conditionner la sélection d’entités selon certains critères.
  • Création d’annotations pour ajouter de nouveaux comportements aux entités, ici avec l’exemple du SoftDeletable permettant de supprimer seulement logiquement une entité.

Ce qu’il faut retenir :

  • Doctrine apporte un confort de développement, pour peu qu’on sache l’utiliser correctement, cependant, la question de l’ORM devra évidemment se poser dès que les performances deviennent très critiques.
  • Cette conférence a été assez mal reçue par beaucoup de personnes du public, qui étaient clairement anti-Doctrine ou plus largement anti-ORM, ce qui est dommage, car de bons conseils y étaient donnés.

Slides de la présentation : https://blog.webnet.fr/wp-content/uploads/2016/04/2016-04-06-FINAL-Pr%C3%A9sentation-SymfonyLive-Doctrine2.pdf

Refondre un moteur de règles avec l’expression language de symfony2 par Xavier Coiffard et Hussein Abbas

Xavier Coiffard :Twitter Github Site web             Hussein Abbas :Twitter

Les deux conférenciers viennent de SELL Secure, société spécialisée contre la fraude en ligne, à destination des sites e-commerce.

Ils sont venus nous parler de la refonte d’un vieux moteur de règles codée avec un bundle Symfony, Ruler, cependant nous n’avons pas su duquel il s’agissait (il existe une multitude de bundles sous ce nom dans Github…). L’existant avait été codé dans l’urgence, plus aucun développeur initial n’était présent et le code était très complexe. La décision a donc été prise de repartir from scratch, en prenant une autre solution si possible dans le monde PHP, mais sans exclure les autres technos. C’est ainsi que le nom de Drools a été évoqué par exemple, mais aussi l’excellent bundle de Kevin Gomez, RulerZ). Leur choix s’est finalement porté sur Expression Langage, intégré directement à Symfony, et qui a l’avantage de permettre un code presqu’en langue naturelle.

Ils se sont alors attachés à dire pourquoi cette solution répondait à leur besoin, et comment la mettre en place et développer leur moteur de règles dans Symfony.

Petit point bonus, ils ont terminé leur présentation par une démonstration en live de leur code, pour montrer la simplicité d’utilisation et le fonctionnement concret des règles.

Ce qu’il faut retenir :

  • Coder un projet à la va-vite peut conduire à une dette technique telle qu’il est parfois nécessaire de tout refaire, leur expérience n’est qu’un exemple de plus.
  • Symfony embarque un composant là encore assez méconnu : l’Expression Langage, très puissant pour développer des ensembles de règles.
  • Les démos ne se passent pas toujours mal 🙂

Slides de la présentation : https://speakerdeck.com/husseinab/expression-language-symfony-live

Sécurité et HTTP par Romain Neutron

Twitter Github Site web

Cette conférence fait écho à celle d’Alain Tiemblo sur la sécurité web, mais le speaker était beaucoup plus dans la solution, et s’est attaché à développer un sujet qui avait été abordé dans l’autre speech : les headers HTTP.

Il explique que son métier est plutôt développeur front-end, mais que dans le cadre de son activité, il a été confronté à ces notions de sécurité, et qu’il souhaite nous faire partager son expérience. Fraîchement embauché chez BlackFire, il a été en charge de l’extension navigateur fournie par l’outil, et s’est retrouvé avec le refus d’afficher une iframe sur Github. Il parle de « sa fin du monde » (photo de Paco Rabanne à l’appui).

Il s’est alors plongé dans l’étude de l’erreur renvoyée, et a constaté que le fait d’afficher son iframe violait une politique de sécurité définie par le site. En faisant un curl -I sur le site de Github, il a découvert tout un ensemble de règles définies via des headers, dont il a cherché à s’inspirer.

S’ensuit une balayage des différentes règles de sécurité possibles à mettre en place via ces headers, en revenant sur l’exemple des attaques XSS, en donnant des éléments de configuration pour serveur Nginx. Il parle de leur très récente adoption par les standards de la W3C, mais de l’intégration plus ou moins complète dans les navigateurs actuels.

Il rappelle enfin que si son extension a eu un problème, c’est parce qu’il cherchait à introduire une iframe. Cependant les extensions ont un accès presque total à tout ce qu’on fait avec le navigateur, et qu’il faut donc rester vigilant quant à celles qu’on installe.

Il revient enfin sur l’attaque dont a été victime Github de la part du gouvernement chinois, baptisée « Grand Canon », et qui consistait à saturer le site de visites fictives à partir des recherches des chinois sur Baidu, le Google local. Depuis des headers spécifiques ont été mis en place pour contrer ce genre d’attaques.

Ce qu’il faut retenir :

  • Là encore, Romain Neutron a démontré l’importance de la sécurité sur un site web.
  • Il existe beaucoup de headers permettant de fixer des règles pour se prémunir des attaques ou du détournement des ressources.
  • Internet sait s’adapter, en témoigne l’épisode du « Great Cannon » chinois.

Slides de la présentation : https://speakerdeck.com/romain/securite-and-http-at-symfony-live-paris-2016

Construire des applications cloud natives par Ori Pekelman

Twitter Github Site web

Cette dernière conférence a été assez difficile à suivre. Le speaker parlait très vite et s’embrouillait parfois dans son discours. Il vient de la société Platform.sh qui héberge des applications en mode cloud.

Il a un peu fait l’état de l’art, ce qui se faisait avant VS ce qui se fait aujourd’hui. Il a également insisté sur le fait qu’une application cloud native ne signifiait pas forcément une application hébergée sur un serveur cloud type Azure, c’est plutôt une question d’architecture dont il nous a donné les grandes lignes à respecter :

  • L’application ne doit pas être liée au serveur sur lequel elle est déployée.
  • Utiliser au maximum les CDN et s’assurer de la fiabilité et de la disponibilité de ceux-ci.
  • Avoir un proxy cache efficace.
  • Etre orientée message (message driven), petit rappel de la conférence de Fabien Meurillon

Ce qu’il faut retenir :

  • Héberger ses applications en mode cloud ne veut pas forcément dire serveur cloud.

Slides de la présentation : https://www.slideshare.net/OriPekelman/construire-des-applications-cloud-natives-symfonylive-paris-2016

En conclusion

C’était encore un grand crû cette année, avec des conférences de qualité portant sur pas mal de sujets, tout ça dans le cadre super classe de l’Université Internationale. J’ai pu discuter avec pas mal de monde sur les stands, et l’ambiance était très sympa comme toujours 🙂