Catégorie : Programmation Web

programmation Web

  • L’essentiel de l’audit des packages avec Composer

    J’ai beau connaître composer depuis quelques années, j’en apprend encore aujourd’hui.

    Composer, l’outil de gestion de dépendances PHP, a introduit une fonctionnalité essentielle pour la sécurité : l’audit des packages. Dans cet article, nous explorerons en détail ce qu’est l’audit des packages, comment l’utiliser et pourquoi il est crucial pour la sécurité de vos projets.

    Qu’est-ce que l’audit des packages ?

    L’audit des packages est un processus qui permet de détecter les vulnérabilités de sécurité dans les dépendances de votre projet. Lorsque vous utilisez des packages tiers (comme des bibliothèques ou des frameworks), il est essentiel de s’assurer qu’ils ne contiennent pas de failles de sécurité connues. C’est là que l’audit des packages entre en jeu.

    Comment fonctionne l’audit des packages avec Composer ?

    • Vérification automatique lors de l’installation et de la mise à jour :
      • Depuis Composer 2.4, chaque fois que vous installez ou mettez à jour un package, Composer vérifie automatiquement les versions installées et les nouvelles versions à la recherche de vulnérabilités connues.
      • Si une version vulnérable est détectée, Composer affiche un avertissement.
    • Commande composer audit :
      • La commande composer audit vous permet de lister les vulnérabilités de sécurité signalées pour les versions actuellement installées des packages.
      • Elle affiche les informations suivantes :
        • Nom du package
        • Identifiant CVE
        • Titre de l’avis de sécurité
        • Lien vers l’avis de sécurité
        • Plage(s) de versions affectées
        • Date de publication de l’avis
    Exemple de Composer audit d'un projet existant
    • Formats de sortie personnalisables :
      • Vous pouvez spécifier le format de sortie pour les vulnérabilités détectées en utilisant l’option --audit-format.
      • Formats pris en charge : table, plain, json et summary.
    • Utilisation en CI/CD :
      • Les pipelines CI/CD peuvent exécuter composer audit pour s’assurer qu’il n’y a pas de vulnérabilités connues avant de déployer l’application.

    Exemple d’utilisation

    Supposons que vous souhaitiez installer une version vulnérable de Guzzle (par exemple, la version 7.4.4). Voici comment Composer réagit :

    Message de prévention lors d'un composer require.

    Composer installe le package, mais affiche un avertissement concernant la vulnérabilité détectée.

    Conclusion

    L’audit des packages avec Composer est un outil puissant pour renforcer la sécurité de vos projets PHP. Utilisez-le régulièrement pour vous assurer que vos dépendances sont à l’abri des vulnérabilités connues. Voici quelques conseils pour une utilisation efficace :

    1. Mettez à jour vos packages : Lorsqu’une vulnérabilité est corrigée dans une nouvelle version d’un package, assurez-vous de mettre à jour votre projet pour bénéficier de la correction.
    2. Surveillez les alertes de sécurité : Abonnez-vous aux notifications de sécurité pour les packages que vous utilisez. Ainsi, vous serez informé rapidement des nouvelles vulnérabilités.
    3. Vérifiez les dépendances de vos dépendances : Les packages que vous installez peuvent eux-mêmes avoir des dépendances. Assurez-vous que ces dépendances sont également sécurisées.
    4. Utilisez des outils complémentaires : En plus de Composer, explorez d’autres outils d’analyse statique et dynamique pour renforcer la sécurité de votre code.

    En appliquant ces bonnes pratiques, vous contribuerez à protéger vos applications PHP contre les menaces potentielles. N’oubliez pas que la sécurité est l’affaire de tous, et chaque petit geste compte !

    Pour finir, voici le lien de la documentation de composer.

  • Maintenance du Code PHP : lib à utiliser

    L’amélioration et la maintenance du code PHP sont des aspects cruciaux du développement logiciel, visant à garantir la fiabilité, la performance et la pérennité des applications. Pour ce faire, l’utilisation de bibliothèques bien choisies joue un rôle essentiel. Ces librairies offrent des fonctionnalités prêtes à l’emploi, facilitant le développement, la gestion des dépendances, et assurant une base solide pour des mises à jour et des corrections efficaces. Opter pour des bonnes pratiques de codage, comme la modularité et la documentation claire, contribue également à simplifier la maintenance du code PHP sur le long terme.

    Comment maintenir des applications en PHP.

    Il existe librairies en PHP, qui aident à la maintenabilité du code en PHP en donnant les infos à améliorer. Ces librairies sont les suivantes : phploc, phpcs, phpmd, phpdd

    phploc, ou comment décortiquer la complexité du code PHP

    PHPLOC est un outil d’analyse statique pour les projets PHP, permettant de mesurer diverses métriques de code. Il fournit des informations détaillées sur la taille et la complexité d’un code source PHP, en comptant notamment le nombre de classes, de méthodes, de traits, de lignes de code, et d’autres indicateurs pertinents. Cet outil est souvent utilisé dans le processus d’évaluation de la qualité du code et peut aider les développeurs à comprendre la structure et la complexité de leur projet. En résumé, PHPLOC offre une vision quantitative des caractéristiques du code source PHP.

    $ php phploc.phar src
    phploc 8.0-dev by Sebastian Bergmann.
    
    Directories:                                        104
    Files:                                              856
    
    Lines of Code (LOC):                             67,955
    Comment Lines of Code (CLOC):                    19,533 (28.74%)
    Non-Comment Lines of Code (NCLOC):               48,422 (71.26%)
    Logical Lines of Code (LLOC):                    18,478 (27.19%)
    
    Classes or Traits                                   662
      Methods                                         3,389
        Cyclomatic Complexity
          Lowest                                       1.00
          Average                                      2.00
          Highest                                    156.00
    
    Functions                                           185
      Cyclomatic Complexity
        Lowest                                         1.00
        Average                                        1.00
        Highest                                        1.00

    Lien github : https://github.com/sebastianbergmann/phploc

    Respect des standards avec phpcs

    PHPCS, ou PHP CodeSniffer, est un outil d’analyse statique de code pour PHP. Il permet de détecter et de signaler les violations des normes de codage définies, telles que PSR-1, PSR-2, et des conventions personnalisées. PHPCS facilite ainsi le maintien de la cohérence et de la lisibilité du code au sein d’un projet PHP, en offrant des recommandations et des corrections automatisées pour s’assurer que le code respecte les standards établis. Cet outil est largement utilisé dans le processus de développement pour garantir une qualité uniforme du code. En résumé, PHPCS contribue à la conformité aux normes de codage et à l’amélioration de la qualité du code PHP.

    Comment utiliser phpcs ?

    Lien github : https://github.com/squizlabs/PHP_CodeSniffer

    Détection automatisée des mauvaises pratiques avec phpmd

    PHPMD, ou PHP Mess Detector, est un outil d’analyse statique de code conçu pour détecter les codes sources PHP potentiellement problématiques. Il se concentre principalement sur les aspects liés à la complexité du code, aux mauvaises pratiques de programmation, et à la détection des codes redondants. PHPMD propose des règles configurables pour identifier ces problèmes, offrant ainsi aux développeurs des suggestions pour améliorer la lisibilité, la maintenabilité et la performance de leur code. En somme, PHPMD est un outil précieux pour identifier et corriger des aspects critiques de la qualité du code PHP.

    Exemple d'utilisation de phpmd

    Lien Github : https://github.com/phpmd/phpmd

    Détection des dépréciations PHP avec phpdd

    PhpDeprecationDetector est un outil spécifique pour la détection des dépréciations dans le code source PHP. Il est conçu pour identifier les portions du code qui utilisent des fonctionnalités ou des méthodes PHP obsolètes, signalant ainsi les points où des mises à jour sont nécessaires pour maintenir la compatibilité avec les versions PHP les plus récentes. Cet outil aide les développeurs à anticiper les changements à venir dans les futures versions de PHP et à prendre des mesures proactives pour mettre à jour leur code en conséquence. En bref, PhpDeprecationDetector contribue à assurer la pérennité des applications PHP en signalant les éléments de code sujets à des modifications dans les versions futures de PHP.

    Exemple d'utilisation de PhpDeprecationDetector

    Conclusion

    En conclusion, l’utilisation synergique de ces librairies représente une approche holistique pour garantir la qualité, la lisibilité et la pérennité du code PHP. En intégrant ces outils dans le processus de développement, les développeurs peuvent non seulement identifier et corriger les problèmes existants, mais aussi anticiper les évolutions futures du langage, assurant ainsi une base solide et adaptative pour leurs applications. En adoptant cette approche complète, les équipes de développement sont mieux équipées pour créer des solutions logicielles robustes, évolutives et conformes aux normes de l’industrie.

    Ils existent bien d’autres librairies de ce style, et je ne manquerai pas d’en discuter, dans le futur.

  • Définition de PHP_VERSION_ID

    Définition de la constante PHP_VERSION_ID

    En PHP, la constante PHP_VERSION_ID est une constante pré-définie qui représente la version courante de PHP sous forme d’un nombre entier. Cela facilite les comparaisons de versions dans le code, car vous pouvez simplement comparer les valeurs numériques plutôt que de manipuler des chaînes de caractères.

    Le format de la valeur PHP_VERSION_ID est le suivant :

    PHP_VERSION_ID = MAJOR * 10000 + MINOR * 100 + RELEASE
    • MAJOR: Le numéro de version majeure de PHP (par exemple, 7 pour PHP 7.x.x).
    • MINOR: Le numéro de version mineure de PHP (par exemple, 4 pour PHP 7.4.x).
    • RELEASE: Le numéro de version de correction (patch) de PHP (par exemple, 3 pour PHP 7.4.3).

    Pour la valeur PHP_VERSION_ID égale à 50600, cela signifie que :

    • MAJOR est égal à 5 (car 50600 divise par 10000 est égal à 5).
    • MINOR est égal à 6 (car 50600 modulo 10000 divise par 100 est égal à 6).
    • RELEASE est égal à 0 (car 50600 modulo 100 est égal à 0).

    Donc, la valeur 50600 correspond à PHP 5.6.0. C’était la version majeure 5, la version mineure 6, et la version de correction (patch) 0 de PHP. Cependant, veuillez noter que cette version est assez ancienne et n’est plus maintenue ni prise en charge. Il est fortement recommandé de mettre à jour vers une version plus récente de PHP pour des raisons de sécurité et de performance. La dernière version stable de PHP au moment de mon dernier entraînement est la version 8.x.x.

  • Message d’alerte sous Symfony

    Symfony est le Framework PHP le plus connu et le plus complet du marché. J’ai l’occasion de souvent l’utiliser, au gré de mes missions, et j’apprends toujours des choses dessus.

    Dernièrement, en créant un espace d’administration sur un projet SF, je devais ajouter un système d’alerte en 2 étapes.

    Étape 1 : l’ajout des messages dans les contrôleurs de Symfony basé sur la fonction addFlash().
    Voici un exemple de code avec cette fonction :

    AddFlash Message

    La 2eme étape se base sur la réception du message d’alerte dans la vue.
    Dans mon exemple, la vue est en Twig, et utilise des classes CSS de Bootstrap 4 :

    Code Twig

    Le code précédent ne traite qu’un Warning.

    Personnellement, j’aime faire des codes plus complet. De plus, je sais que Bootstrap 4 possède plusieurs types d’alertes.

    En posant quelques questions à ChatGPT (oui, j’ai triché et alors), j’ai eu rapidement un code plus complet, et qui faisait le taf.
    Le voici :

    Ce code définit une table de correspondance alertClasses qui relie chaque type de message à la classe CSS appropriée.
    La classe CSS appropriée est définie en utilisant la table de correspondance lorsque le type de message est rencontré et utilisé dans le div.
    La structure de div est maintenant unique pour tous les types de messages, ce qui permet un code factorisé, et réutilisable dans toutes mes vues.

    Et voilà. Qu’en pensez-vous ?

  • Cartographie des villes de la loi montagne

    cartographie des villes de la loi montagne.

    La loi montagne 2 est une réglementation qui concerne l’utilisation de pneus neige sur les routes de montagne en France. Elle impose l’obligation d’utiliser des pneus neige ou des chaînes à neige sur certains tronçons de route lorsque les conditions météorologiques le nécessitent. Cette loi vise à améliorer la sécurité routière en montagne en hiver, en garantissant une meilleure adhérence des véhicules sur la route. Tout conducteur qui ne respecte pas cette obligation peut être verbalisé par les forces de l’ordre. Il est important de noter que la loi montagne 2 ne concerne que les routes de montagne en France, et qu’elle ne s’applique pas dans d’autres pays.

    J’ai reçu début décembre la liste des villes, ou il était obligatoire d’avoir ces pneus neiges.
    Voici cette liste : communes-loi-montagne.pdf

    Je voulais faire une cartographie avec ces données, mais comme je partais d’un PDF, je partais de très loin. Il me fallait avoir cette liste au format Excel, voir CSV, pour pouvoir bien commencer.

    J’ai regarder quelques applications permettant la conversion de fichier PDF en Excel.
    Après quelques tests, j’ai utilisé sodapdf qui m’a permis de faire la conversion souhaité. J’ai ensuite effectué une convertion excel à CSV.

    J’avais des données prêtes à être utilisé, mais il me manquait l’essentiel pour afficher les villes sur une carte : les coordonnées géographiques.
    Je connais justement une API permettant de rechercher ces informations, par rapport au nom de ville : l’API Adresse.

    Après un peu de recherche et un petit algo en PHP, je récupère les coordonnées en une fois.
    Je mets toutes ces données finales dans un fichier json.

    Il me restais à créer la carte qui afficherai ces points.
    Cette carte se trouve à l’adresse suivante : https://data.guillaume-richard.fr/carto/.

    Qu’en pensez-vous ?