Programme

Sécurité web : et si on continuait à tout casser ?

Sur le même principe que lors de mon talk de l'année dernière ( https://www.youtube.com/watch?v=YRRUbsXHC80 pour les curieux ), je vais vous montrer d'autres moyens de casser des sites, dans le but que vous sachiez comment vous en protéger par la suite. Redirect attacks, URL obfuscation, Man-in-the-Middle, Password reuse, premium phone numbers, captcha cracking, insecure direct object reference.... sont sûrement des buzzwords que vous avez entendus, mais savez-vous les exploiter ?

Opcode ? Mais à quoi ça sert ?

En tant que développeur PHP, nous avons certainement tous entendu parler de l'opcode, cette sauce magique qui tourne au sein du moteur PHP qui permet de booster les performances. Mais qu'est-ce que c'est exactement cet opcode ? Pourquoi rend-il l'exécution plus rapide ? Est-ce que ça ne sert qu'à la performance ? Et le cache d'opcode dans tout ça ? Le but de cette conférence est de démystifier ce qui se passe au sein du moteur Zend, de comprendre ce que devient notre code lorsqu'il est digéré par l'interpréteur et transformé en opcode avant d'être executé sur la machine virtuelle.

Code review beyond code style

Reviewing code can feel like a secondary task. Discussing code can be easy though, if you leave out syntax details. Following a couple of guide lines for pull requests can make code reviewing much easier. Some code style rules can drastically reduce the mental overhead needed to understand code changes. Furthermore this talk will give some general guidelines on how to give feedback on PRs as a peer developer or coworker. These rules are not to keep for yourself, share them with your peers and your life will get easier.  

JWT - To authentication & beyond!

Tokens are widely used to identify resources and try to add some security to insecure environments, but sometimes the management of those identifiers can get a bit complex - even more on distributed systems. What if we could have an intelligent token, one that simplifies the way things works without losing integrity or security? In this talk we present Json Web Tokens as an alternative for smart and self contained tokens, explaining how to use each claim and giving some common use cases.

Make your code great again with the Object Calisthenics

Et si vous utilisiez les Objects Calisthenics pour muscler votre code ? Que sont ces règles ? Pourquoi et comment les appliquer ? La promesse initiale d'améliorer la lisibilité, la maintenabilité et la testabilité de son code est-elle vraiment respectée ? Et surtout, est-ce que c'est applicables à notre merveilleux monde du PHP ? Promis, aucun effort physique ne vous sera demandé.

Tagua VM, a safe PHP virtual machine

PHP est un langage extrêment populaire. En 2015, PHP était utilisé par plus de 80% de tous les sites Web. Cependant, 500 vulnérabilités sévères sont répertoriées. Bien qu'inhérent à tous langages populaires, cela reste très dangereux. L'objectif du projet Tagua VM est de fournir une VM PHP qui garantie un haut niveau de sûreté et de qualité en supprimant des larges classes de vulnérabilités, grâce à des outils appropriés comme Rust et LLVM. Rust est un langage remarquable qui apporte des garanties fortes à propos de la sûreté de la mémoire. C'est aussi un langage très rapide qui rivalise avec C. LLVM est une infrastructure de compilateur célèbre qui apporte de la modernité, des algorithmes à la pointe, des performances, une suite d'outils pour développeur etc. Ce projet va résoudre trois problèmes en une fois : 1. Fournir un niveau haut niveau de sûreté et de qualité en supprimant des larges classes de vulnérabilité, et ainsi éviter des coûts de bugs dramatiques ; 2. Fournir de la modernité, une nouvelle expérience développeur et des algorithmes à la pointe de la recherche, donc des performances ; 3. Fournir un ensemble de bibliothèques qui vont composer la VM et qui pourront être réutiliser en dehors du projet (comme le parseur, les analyseurs, les extensions etc.). Durant cette conférence, nous présenterons les objectifs de ce projet, ainsi que son avancement. Nous expliquerons pourquoi il est crucial et pourquoi il reçoit le soutient d'une communauté grandissante et de développeurs notables (avec un rôle important dans le développement de PHP).

[ATELIER] My app is secure... I think

With more and more sites falling victim to data theft, you've probably read the list of things (not) to do to write secure code. But what else should you do to make sure your code and the rest of your web stack is secure ? In this tutorial we'll go through the basic and more advanced techniques of securing your web and database servers, securing your backend PHP code and your frontend javascript code. We'll also look at how you can build code that detects and blocks intrusion attempts and a bunch of other tips and tricks to make sure your customer data stays secure.

Monitoring applications - evolve from text logs to extensive automatic monitoring

Bugs, corrupt data or performance issues on web applications are often recognized far too late. In the worst case they are reported by the customer, so they probably have already done some serious damage - frustrated the user, made them lose trust or even corrupted their data. Finding these bugs or recognizing them early gets especially hard, if your application makes heavy use of background processes, daemons or cronjobs. They might even throw exceptions that are buried somewhere in the logs, and no one will ever be aware of them, until someone has a look into the log files. I want to show a way out of this misery and provide different solutions in form of practical examples. These will include different levels of monitoring - from simple text logs on the servers up to a fully monitored application including hardware monitoring, extensive metrics, indexed and searchable logs of the whole environment, performance analysis and alerts if something odd happens. I'll show different examples and give ideas when such a fully monitored solution is a good idea, or when a "light monitoring" is applicable.

Map, filter, reduce : aidons-les, ils nous aideront

Les fonctions array_map, array_filter et array_reduce sont disponibles depuis longtemps en PHP. Pourtant, mesure-t-on vraiment l’intérêt de cette façon de programmer par rapport aux bonnes vieilles boucles qui marchent très bien ? Pourquoi la trouve-t-on associée à Google, Apache Hadoop, ou encore Java 8 ? Je vous propose d’abord de voir que cette approche donne du code clair, focalisé sur la description de l’algorithme plutôt que sur l’implémentation, et qu’elle se combine très bien avec les notions de curryfication et de composition, également issues de la programmation fonctionnelle. Ce sera l’occasion de constater que si PHP7 a facilité l’usage de ces deux concepts, il lui reste encore une marge de progression. Enfin, la démonstration d’une implémentation parallèle 100% PHP de map, filter et reduce, exploitant un processeur multicœur, illustrera le gain de performances que l’on peut en attendre.

Does the SPL still have any relevance in the Brave New World of PHP7?

Largely ignored under PHP5, the SPL (Standard PHP Library) offered a powerful toolbox for developers, ranging from it's horrendously named collection of Iterators, and a series of Interfaces allowing us to build our own, to DataStructures, and Object Oriented file handling classes. Fast and powerful, the SPL provided a stable and well-tested library of classes and functions But with all the performance and memory improvements of PHP7, SPL has remained unchanged, and feels like it has been left behind. Now, Generators provide a simpler replacement for writing our own Iterators without all the boilerplate code that SPL's core Iterators require, especially with the introduction of "yield from" in PHP7 for recursive Iterators. And PHP7's performance improvements allow us to write our own Datastructures (based around standard PHP arrays, or custom objects) that are as efficient as SPL's basic Datastructures. So does SPL still have any purpose or value in this new world of PHP7? Let's find out!

phpSpec: Les tests unitaires version BDD

phpUnit est très généralisé. Voilà l'occassion de découvrir une alternative: PhpSpec ! Ne pensez plus test unitaire, pensez Specifications ! Vous verrez que cet outil permet de mieux découpler votre code et qu'il permet de rédiger des tests parfois plus "unitaire" que certains tests via PHPUnit. Chez KNP, nous utilisons uniquement PhpSpec depuis plusieurs années et nous sommes toujours aussi confiants dans nos tests !

PSRs: quoi, pourquoi et comment ?

Bien que prenant de plus en plus d'importance dans notre écosystème, les PHP Standards Recommendations restent trop méconnues et quelque peu mystiques pour bon nombre d'entre nous. Dans ce talk, je vous propose de comprendre ce qu'est une PSR puis de parcourir brièvement l'ensemble des recommandations existantes, qu'elles soient validées, acceptées ou en cours d'écriture. Nous reviendrons également sur l'importance et le but de ces standards ainsi que sur leur processus d'élaboration.

A beginner's guide to deployments

Deploying an application means different things to different people. It may be as simple as running `git pull` on a server, or as complex as building RPMs and deploying to a canary set of servers. This talk covers both ends of the spectrum and the points in between. We outline a tried and tested deployment methodology that everyone can use, whether it’s a simple WordPress site or a dozen micro-services. ---- Additional Notes (for organisers only) Application deployment is a complex and overcrowded area. You can use an FTP client or you can build custom RPMs for every service you use. The sweet spot is actually somewhere in between. This talk will cover code deployments as well as database and media migration, whilst touching on continuous integration as a way to reduce the risk of big bang deployments.

Dev rencontre Ops, 1 an après

Infrastructure AWS hautement résiliante, architecture blue-green, déploiements entièrement automatisés, application Symfony découplée en microservices gérés par un API Manager... Nous avions tous les outils pour former une équipe Devops performante. Pourtant il nous manquait un ingrédient essentiel: la pratique, qui nous a permis d'améliorer significativement la manière dont nous collaborons !

C'est pourquoi, nous, Pauline, ops, et Aurore, dev, souhaitons revenir avec vous sur un an de projet qui a abouti au lancement d'une nouvelle plateforme web d'un leader industriel mondial. Grâce à des exemples concrets, vous découvrirez nos bonnes idées, aussi bien techniques qu'organisationnelles, mais aussi les erreurs que nous avons commises et comment nous les avons corrigées afin que vous puissiez les éviter.

Application profiling using XDebug, XHprof, Blackfire

It's obvious, that a good application must be fast. Fast execution saves clients' time, server resources and, as a result - company's budget. We will dive into PHP profiling world and will learn, how to profile your app using the Xdebug, XHprof and Blackfire. We will learn how to configure these tools, collect and analyze profiles, search and fix "bottlenecks" in code and evaluate optimization results. We will discuss popular mistakes that lead to lower performance and learn how to avoid them. Plus we'll discuss how to support the application performance during development even without profiler on Yii 2 example. 

Thread Safety en PHP (ZTS)

On entend parfois parler de threads avec PHP, et du mode "Thread safe" de PHP. Mais, c'est quoi au juste ? Nous allons commencer par rappeler l'histoire de l'informatique et l'appartition des threads, tout en tâchant de les définir au passage. Nous nous focaliserons ensuite sur l'intéressant cas de PHP , en le comparant avec d'autres technos comme Java. C'est quoi "PHP thread safe". Peut-on utiliser des threads avec PHP ? Comment ? Quel interet ? Quels dangers ? A quoi sert le mode Zend Thread Safe (ZTS) de PHP ? Tâchons de demystifier ce vaste mais passionnant sujet ensemble.

The ultimate microservice stack

L'architecture de nos applications a beaucoup évolué ces derniers temps : nous sommes passés des monolithes à des architectures orientées services où chacun de ces services joue un rôle très spécifique et expose une API. D'autre part, le mode de livraison de nos applications a radicalement changé : aujourd'hui nous voulons livrer un MVP rapidement et itérer sur cette base. Les frameworks full-stack ne sont pas forcément adaptés car ils obligent à mettre en place une certaine quantité de choses avant de fonctionner. En PHP, nous avons donc des frameworks permettant de produire rapidement des applications monolithiques mais également beaucoup d'autres petites libraires ou micro-frameworks permettant de créer de petits services rapidement. Je vous propose donc aujourd'hui une présentation sur une pile technique très intéressante pour construire des micro-services et des MVPs rapidement tout en utilisant les bonnes pratiques connues (tests, injection de dépendances, ...). Cette pile s'appuie sur des librairies PHP, des recommandations (PSR) et outils permettant d'être productif du début du développement jusqu'à la mise en production.

PHP Doc Vs PHP 7 Strict Typing

Au cours de mes dernières expériences professionnelles, dans l'équipe de développement nous avons eu plusieurs discussions à propos d'une convention à adopter pour la PHP Doc dans nos codes, surtout avec le type hinting enrichi par PHP 7 (types scalaires des variables et type de retour autorisé). Certains pensent que le type hinting de PHP7 suffit amplement, d'autres pensent qu'il faut le mixer avec la php doc, d'autres pensent que selon les cas, la php doc peut être utilisée en complément. Un draft sur la documentation dans la psr 5 est en cours d'écriture mais n'impose pas un standard. Quelle conclusions faut il en tirer ? quelles solutions sont adaptées ? Une présentation de l'étude permettra aux développeurs de mieux documenter leurs codes et de comprendre certaines spécificités.

Retour sur les panama papers et les bases de données graphe

Au printemps 2016, le premier article de presse sur les "Panama papers" a été publié. Il s'agit de la plus grande 'fuites' de l'histoire avec plus de 3T de données brutes. Cette conférence vous détaillera les technologies que l'ICIJ (International Consortium Of Investigate Journalists) a utilisé pour fournir aux journalistes une interface simple pour leur recherche. Via une démonstration sur les données des panama papers, je vous présenterai notamment le coeur du système, à savoir la base de données graph Neo4j avec son moteur de requête Cypher.

The Big "Why equal doesn't equal" Quiz

So you think you know PHP ? But do you really ? We all compare and test data on nearly every other line in our code, be it input validation, an if-statement, a switch or determining what to display and how. So of course we are all experts on how to do these tests and comparisons…. Or are we? No matter whether you are a beginner or an expert, come and join in the fun for the Big “Why equal doesn’t equal” Quiz, test your knowledge and learn about defensive programming and the quirks of a loose type programming language along the way.

2 ans avec Pomm

Comment survit-on à un long développement sans utiliser Doctrine mais en s'appuyant sur Postgres avec l'OMM Pomm ? Quels problèmes a-t-on rencontré et quelles solutions cela nous a-t-il apporté ? Cette conférence se veut être un retour d'expérience du développement d'une application conséquente avec Symfony & Pomm.

De la qualité de PHP

Après un rappel sur les versions maintenues de PHP regardons le cycle de vie des versions, avec les différents niveaux de maintenance (active ou sécurité). Regardons aussi le traitement des problèmes de sécurité qui vient d'être récemment modifié. Chaque version "Release Candidate" doit être soumise à des tests approfondis (QA) pour s'assurer que la version finale n'introduit pas de régression, pour cela, la suite de tests de PHP n'est pas suffisante, au contraire il est nécessaire de vérifier le fonctionnement de l'ensemble de la pile PHP, c'est à dire d'un maximum de composants utilisant PHP (bibliothèque, cadre logiciel, application...). Membre de la "QA team" depuis plusieurs années, il s'agit aussi d'un retour d'expérience sur les tests réalisés, quelques régressions découvertes, leur gestion. L'occasion de mettre en lumière la collaboration entre les projets, en amont (développeurs) et en aval (utilisateurs et distributeurs).

PHP : The Wrong Way

En quelques années, nous avons eu Composer, Symfony et ses composants, phpunit et behat, php-cs-fixer ou encore phan... Bref, aujourd'hui, il est presque devenu impossible de produire du mauvais PHP. Mais impossible n'est pas français, et nous nous amuserons donc à faire le code le plus sale possible avec ce magnifique langage, et pourquoi pas trouver les meilleures façons de le faire violemment crasher ?

My Slack Bot speaks PHP

Retour d’expérience sur la mise en production, la croissance puis la monétisation de MailClark, le Slack Bot qui permet de recevoir et d’envoyer des emails et des tweets directement dans Slack. MailClark est développé en PHP sous un modèle de micro-services orchestrés par Docker et qui communiquent entre-eux via des queues et consumers RabbitMQ. Le cœur de la solution est un service gérant plus de 5000 connexions WebSocket avec Slack grâce au framework React-PHP, orienté asynchrone. Venez écouter comment nous avons géré la croissance de ce service basé en grande partie sur des technologies émergentes.

REX API Platform

API Platform, vous connaissez ? Si on en croit la documentation, il s'agit du framework ultime pour construire des APIs web modernes. Je vous propose de découvrir ce qui se cache réellement derrière ce titre un peu pompeux. :) Suite à l'utilisation de ce framework pour construire une API web, je vous expliquerais ce que ce framework m'a apporté ainsi que les différents problèmes que j'ai rencontrés lors de sa mise en place.

[ATELIER] CQRS et Event Sourcing, les mains dans le cambouis !

 

Cet atelier a pour but de présenter concrètement le concept de CQRS et Event Sourcing en faisant développer les participant(e)s sur un petit projet prévu à cet effet. Par un exercice préparé exprès pour l'occasion nous illustrerons les différents points clés d'une architecture Event Sourcée : 
* utilisation de commandes (création d'après interactions externes) afin d'injecter des actions métiers dans l'application 
* création de CommandHandlers (et explication rapide des Aggrégats) pour conversion en évènements après validations métier 
* stockage et publication d'évènements 
* création (et modification de projections) Les participant(e)s pourront juger de l'intérêt de décorréler le code métier du code des frameworks / librairies au sein de leurs applications, tout en montrant les facilités d'évolutions amenées par l'Event Sourcing. 
À l'issue de l'atelier, le sujet de l'atelier pourra servir de base à l'apprentissage du concept pour ceux/celles que cela aura vraiment intéréssé.

Cet atelier a pour but de présenter concrètement le concept de CQRS et Event Sourcing en faisant développer les participant(e)s sur un petit projet prévu à cet effet. Par un exercice préparé exprès pour l'occasion nous illustrerons les différents points clés d'une architecture Event Sourcée : 
* utilisation de commandes (création d'après interactions externes) afin d'injecter des actions métiers dans l'application 
* création de CommandHandlers (et explication rapide des Aggrégats) pour conversion en évènements après validations métier 
* stockage et publication d'évènements 
* création (et modification de projections)
Les participant(e)s pourront juger de l'intérêt de décorréler le code métier du code des frameworks / librairies au sein de leurs applications, tout en montrant les facilités d'évolutions amenées par l'Event Sourcing. À l'issue de l'atelier, le sujet de l'atelier pourra servir de base à l'apprentissage du concept pour ceux/celles que cela aura vraiment intéréssé.

Asynchronous processing with RabbitMQ

Developers of modern web applications strive for fast response times and efficiency. One of the ways to achieve them is to postpone performing costly and potentially failing operations like sending an e-mail after the HTTP request is complete and the user has seen that his intended action has been successful. This is called asynchronous task processing. In the past it was usually achieved with periodically executed scripts by Cron. This solution requires inserting data about tasks into a persistent storage like a relational database and lock the data to prevent duplicate execution. Tasks are not performed instantly but within the next run of a script. It's also not easy to scale task processing to multiple executors at the same time. This approach became popular because of limited capabilities of shared webhosts. But in the last years it has been more and more difficult to make excuses for preferring Cron over alternative approaches thanks to decreasing prices of VPSes. Message queues do not share the problems of Cron-executed scripts - they offer instant task processing and easy scalability. But at the same time this concept can be more difficult to grasp and creates new troubles in different areas - mainly deployment and integration into existing codebases. In this talk, I will dive into specifics, advantages and disadvantages of developing a web application with the help of RabbitMQ or a similar technology, and share everything we had to do to be able to produce and consume hundreds of thousands messages a day within a large legacy PHP codebase of an application that serves >200k daily visitors.