PHP - Infection 17 août 2022 Infection est une libraire de test créée par Maks Rafalko qui se distingue d’autres par le fait de faire du “mutation testing”. L’idée est d’introduire des modifications dans votre code (des mutations) pour voir si vos tests (Phpunit, Phpspec, Pest, Codeception) détectent ces modifications. S’ils les détectent, ça veut dire que vos tests couvrent bien les scénarios possibles, s’ils ne les détectent pas, ça veut dire que vos tests sont incomplets. ...
Oauth2 ne sert pas à authentifier 16 août 2022 Combien de fois ai-je entendu : “un serveur OAuth2 permet de faire de l’authentification” ? Bon pas tant que ça, mais c’est arrivé plusieurs fois quand même 😄. Je vais essayer d’expliquer dans ce billet pourquoi ça ne sert pas à ça et surtout pourquoi il ne faut surtout pas l’utiliser pour ça. OAuth2 c’est quoi ? OAuth2 est un protocole (et/ou framework) de délégation d’autorisation. Il permet d’autoriser une tierce partie d’accéder à ses ressources sans partager pour autant un secret (comme un mot de passe). ...
PHP 8.1 - Enums 9 août 2022 Enfin ! C’était devenu une sorte de serpent de mer : les enums en PHP. On a très longtemps du “bricoler” ou mieux utiliser des libraires comme https://github.com/myclabs/php-enum par exemple. Depuis PHP 8.1, les enums sont natifs au langage. On peut résumer grossièrement un enum en un ensemble de constantes typées. On peut donc “typehinter” les paramètres ou les retours de nos méthodes avec. Cet ensemble permet de définir une liste de valeurs prévues et empêche donc potentiellement de se retrouver avec des valeurs inattendues sur une propriété. ...
PHP - Rector 7 août 2022 Rector est un outil faisant partie de l’écosystème PHP, créé par Tomas Votruba, permettant de refactoriser le code de façon automatique. Il y a pour cela pas mal de rules qui vont définir quelle refactorisation on souhaite appliquer. L’exemple le plus connu (en tout cas celui que je connaissais) est d’utiliser les rules de montée de version de PHP ou de montée de version de Symfony. Mais il existe beaucoup d’autres règles de refactorisation (suppression du code mort, qualité de code, …). ...
Conseils aux étudiants en développement logiciel 6 août 2022 Depuis plusieurs années, j’interviens dans plusieurs filières (👋 UCA, ISIMA et Hesias) pour donner des cours de développement web. J’ai sans aucun doute moins de qualités pédagogiques qu’un enseignant de formation, en revanche, je peux probablement apporter aux étudiants une vision du marché du travail, de la vie en entreprise, des processus de recrutement, plus concrète qu’un enseignant. Et chaque année, j’aime prendre quelques minutes pour discuter de ces sujets et leur apporter mon point de vue (qui n’est pas la vérité absolue hein). ...
PHP - Symfony vs Laravel : mon expérience 31 juillet 2022 Récemment dans mon parcours professionnel, j’ai eu l’occasion de travailler sur une application Laravel 8. Moi qui était plutôt habitué à coder avec Symfony, c’était un challenge sympa de découvrir ce framework. Je dis découvrir mais en réalité j’avais déjà bossé avec Laravel (v4.2 et v5) en 2016 pour développer une petite API REST. Mais honnêtement cette expérience n’était pas suffisament poussée pour maitriser ce framework. Dans ce billet, j’ai envie de poser par écrit ce que j’ai compris des différences entre les deux frameworks. ...
PHP 8.2 - Classe readonly 29 juillet 2022 Après les propriétés readonly avec PHP 8.1 (info ici), nous aurons bientôt (fin 2022) les classes readonly avec PHP 8.2. Une classe déclarée readonly signifie que toutes ses propriétés sont également readonly. readonly class Foo { public string $bar; public string $baz; } Cela aussi implique que toutes les propriétés de la classe doivent être typées (puisque qu’une propriété non typée ne peut pas être readonly). Il sera également impossible d’utiliser des propriétés dynamiques (pas bien grave on est d’accord ? ...
PHP 8.1 - Propriété readonly 25 juillet 2022 PHP 8.1 a introduit une nouvelle fonctionnalité vraiment intéressante : les propriétés readonly. Celle-ci permet de déclarer que la valeur de la propriété ne peut être modifiée qu’une seule fois. Bien souvent on va vouloir le faire dans un constructeur mais ça peut être fait dans une autre méthode. En revanche, impossible de le faire à l’extérieur de la classe. C’est bien toute modification qui est impossible : c’est à dire qu’il est impossible d’utiliser les opérateurs d’incrémentation/décrémentation, unset(), etc… ...
Tour d'horizon de failles connues de JWT 23 juillet 2022 Tout d’abord je dois dire que le titre est clairement trompeur. Il n’y a pas de faille à proprement parler dans la technologie elle-même mais plutôt dans ses implémentations (quelque soit le langage utilisé). Faisons donc un tour des vulnérabilités plus ou moins connues des implémentations de JWT. Algo “none” Une vulnérabilité assez vite exploitée fut l’utilisation de la valeur none dans l’entête du JWT. En effet, il est prévu dans la RFC7519 la possibilité d’avoir des jetons non sécurisés en le spécifiant de cette manière : ...
Quelques bonnes pratiques lorsqu'on utilise des JWT 22 juillet 2022 JWT est une technologie bien connue des développeurs aujourd’hui. On l’utilise très souvent comme clé d’API, comme access token lorsqu’on fait du OAuth2 ou encore comme id token dans le cadre d’OpenID Connect. En clair, ça sert à faire de l’authentification et/ou de l’autorisation. Et comme tout ce qui touche à ce genre chose, il est primordiale d’y apporter une attention toute particulière ! C’est un angle d’attaque intéressant pour un attaquant non ? ...