Skip to main content

Débuter avec l’analyse statique de PHP en 2024

Écrit par
blog feature playwright tests

21 mars 2024

0 minutes de lecture

PHP est un langage de script côté serveur très répandu dans le développement web. En s’appuyant sur des outils d’analyse statique qui aident à limiter les erreurs de code PHP, les failles de sécurité et les autres problèmes susceptibles de nuire à la qualité et à la sécurité de l’application s’ils ne sont pas traités tôt dans le cycle de développement, les développeurs PHP peuvent livrer et déployer des logiciels de meilleure qualité.

Qu’est-ce que l’analyse statique ?

L’analyse statique, également appelée analyse statique du code ou analyse du code source, est une méthode de débogage qui consiste à examiner le code source avant l’exécution d’un programme. Elle s’effectue en appliquant un ensemble de règles de codage au code source du programme. Son objectif principal est de détecter et de corriger les erreurs dès les premières étapes du développement.

Dans le contexte de PHP, l’analyse statique consiste à examiner le code PHP sans l’exécuter, afin de détecter des problèmes, de vérifier le respect des normes de codage et de comprendre l’architecture, entre autres.

Voici un exemple montrant comment un outil d’analyse statique mettrait en évidence un problème dans du code PHP :

<?php
function add(int $left, int $right): int {
    return $left + $right;
}

echo add("one", "two");
?>

Dans cet exemple, l’outil d’analyse statique signalerait que les arguments « one » et « two » ne sont pas des entiers, et qu’ils ne respectent donc pas la déclaration des types de paramètres de la fonction.

L’importance de l’analyse statique dans le développement PHP

L’analyse statique joue un rôle essentiel dans le développement PHP pour plusieurs raisons. Tout d’abord, elle aide à repérer les erreurs de code PHP et les problèmes potentiels dans la base de code avant le déploiement en production. C’est particulièrement important avec un langage comme PHP, au typage dynamique, dans lequel il est facile d’introduire des erreurs liées aux types.

Ensuite, l’analyse statique en PHP permet de vérifier que le code respecte un ensemble prédéfini de normes de codage. C’est particulièrement important pour les grands projets ou le travail en équipe, où la cohérence du style de codage est essentielle à la lisibilité et à la maintenabilité du code.

Enfin, l’analyse statique peut aider à repérer le code complexe ou « malodorant » qui pourrait nécessiter une refactorisation. En fournissant des indicateurs de complexité du code, elle peut guider l’amélioration de sa qualité globale.

Les avantages de l’analyse statique

L’analyse statique, notamment dans le développement PHP, aide les développeurs et les équipes de sécurité à :

  • Améliorer la qualité du code : les outils d’analyse statique aident les développeurs à améliorer la qualité de leur code en détectant les erreurs, les failles de sécurité et les écarts par rapport aux normes de codage. En corrigeant ces problèmes tôt dans le cycle de développement, les développeurs évitent qu’ils ne prennent plus d’ampleur par la suite.

  • Renforcer la sécurité : du point de vue de la sécurité, les outils d’analyse statique peuvent aider à repérer les failles potentielles dans votre base de code. Ils détectent des problèmes de sécurité courants comme l’injection de code en PHP, les scripts intersites (XSS) et les failles de redirection ouverte.

  • Détecter les erreurs de code tôt : en détectant les problèmes dès le début, l’analyse statique fait gagner du temps et des ressources aux développeurs. Elle peut réduire considérablement le temps consacré au débogage et aux revues de code manuelles, permettant aux développeurs de se concentrer sur des tâches plus complexes. Commencez dès maintenant avec l’analyse statique de sécurité gratuite de Snyk.

  • Respecter les normes : l’analyse statique peut aider à garantir que votre base de code respecte les normes du secteur en matière de qualité, de sécurité et de maintenabilité du code. C’est particulièrement important dans les secteurs réglementés, où le respect de certaines normes est souvent obligatoire.

Découvrir PERCS 2.0

PERCS 2.0, acronyme de PHP Enhanced Review Coding Standard, est une mise à niveau majeure de la version initiale de PERCS. Cet outil avancé d’analyse statique du code PHP permet aux développeurs de respecter un ensemble précis de normes de codage, d’améliorer la qualité de leur code et de renforcer les conventions de codage.

Cette version de PERCS offre de nombreuses fonctionnalités, notamment la vérification de la syntaxe et du style de code, ainsi que la détection de failles de sécurité potentielles. C’est un outil précieux pour les développeurs PHP qui souhaitent améliorer la qualité de leur code et s’assurer qu’il respecte les conventions de codage standard.

// Sample PHP code
<?php
$a = 1;
$b = 2;

// PERCS 2.0 can identify if this code adheres to the defined coding standards
$result = $a + $b;

// PERCS 2.0 will provide feedback on potential issues in this code
$result = add('1', 2);
?>

Le respect des normes de codage est essentiel au développement logiciel. Elles garantissent que le code est lisible, maintenable et cohérent, ce qui facilite la collaboration des équipes et la compréhension de la base de code par les nouveaux développeurs. Les normes de codage permettent également d’éviter les erreurs courantes et les failles de sécurité potentielles. En appliquant un style de codage standardisé, les développeurs peuvent détecter et corriger les problèmes plus efficacement.

// A non-standard code
<?php
function ADD($a,$b){return $a+$b;}
?>

// A standard code
<?php
function addNumbers($firstNumber, $secondNumber) {
    return $firstNumber + $secondNumber;
}
?>

PERCS 2.0 améliore considérablement la qualité du code et le respect des conventions de codage. Pour cela, il fournit aux développeurs un retour immédiat sur leur code et signale les écarts par rapport aux normes de codage ainsi que les failles de sécurité potentielles.

Grâce à PERCS 2.0, les développeurs peuvent appliquer des exigences de qualité de code plus strictes et s’assurer que leurs applications PHP sont fiables, maintenables et sécurisées.

Les 3 meilleurs outils d’analyse statique pour PHP

Dans le domaine de la sécurité du code et du développement logiciel, l’analyse statique est essentielle pour maintenir une qualité de code élevée et repérer les failles de sécurité potentielles avant qu’elles ne deviennent problématiques. Découvrons trois puissants outils d’analyse statique pour PHP : PHPStan, Psalm et Snyk. Ils permettent aux développeurs de détecter les bugs et les failles de sécurité dans le code PHP afin de garantir la conformité de l’application aux exigences de sécurité.

1. PHPStan

PHPStan est l’un des outils d’analyse statique les plus populaires pour le code PHP. Il se concentre sur la détection des bugs dans votre code sans l’exécuter. Son principal avantage : il peut détecter des catégories entières de bugs avant même que vous n’écriviez des tests pour le code.

Pour installer PHPStan, vous pouvez utiliser Composer, un outil de gestion des dépendances en PHP. Voici comment procéder :

composer require --dev phpstan/phpstan

Pour analyser votre code PHP avec PHPStan, il suffit d’exécuter la commande ci-dessous :

vendor/bin/phpstan analyse src

Ici, src désigne le répertoire qui contient votre code PHP. PHPStan affiche ensuite la liste des problèmes potentiels détectés dans votre code. Le résultat comprend généralement le nom du fichier, le numéro de ligne et une description du problème. Voici un exemple de résultat qu’il pourrait détecter et signaler :

------ ----------------------------------------------------------------
  Line   src/Example.php
------ ----------------------------------------------------------------
  10     Parameter #1 $a of method Example::add() expects int, string given.
------ ----------------------------------------------------------------

2. Psalm

Psalm est un autre puissant outil d’analyse statique pour PHP. Il est conçu pour détecter les erreurs de syntaxe et de logique dans votre code. L’un de ses principaux avantages est sa capacité à déduire les types dans votre code PHP, ce qui permet de détecter les bugs liés aux types avant qu’ils ne surviennent.

Vous pouvez installer Psalm avec Composer :

composer require --dev vimeo/psalm

Pour analyser votre code PHP avec Psalm, utilisez la commande suivante :

vendor/bin/psalm

Psalm affiche une liste des problèmes détectés dans votre code, comme PHPStan. Toutefois, Psalm indique également le niveau de gravité de chaque problème, ce qui peut vous aider à prioriser les corrections.

Voici un exemple de résultat de Psalm :

ERROR: InvalidArgument - src/Example.php:10:10 - Argument 1 of Example::add expects int, string provided

3. Snyk pour sécuriser le code dans le développement PHP

Snyk est un outil de sécurité conçu pour les développeurs qui les aide à détecter, comprendre et corriger les failles et les problèmes de sécurité dans leur code, leurs dépendances <PRIVATE_PERSON> et open source, leurs images de conteneur, et plus encore. L’outil s’intègre directement à votre flux de travail actuel. Il s’intègre parfaitement à divers IDE et outils de compilation : vous pouvez installer gratuitement le plug-in PHPStorm ou l’extension VS Code de Snyk, puis commencer à analyser votre code à la recherche de failles de sécurité.

Snyk détecte les problèmes de code non sécurisé grâce à sa vaste base de données de vulnérabilités et à ses capacités intelligentes d’analyse de code. L’outil peut ainsi repérer un large éventail de menaces potentielles, notamment l’exécution de code qui a affecté le projet SuiteCRM, ainsi que l’exécution de code à distance dans dompdf.

Voyons un exemple d’injection SQL que Snyk peut détecter :

// Example of SQL Injection Vulnerability
<?php

$conn = new mysqli("127.0.0.1", "user", "MySecretPassword", "db");

function doSqlQuery() {
  $query = "SELECT * FROM users WHERE login = '" . $_POST["login"];

  return mysqli_query($conn, $query);
}

$target = $_GET["target"];

header("Location: " . $target);

echo $_GET["user"];

Dans l’extrait de code PHP ci-dessus, les entrées utilisateur sont directement concaténées dans la requête SQL, ce qui expose le code aux attaques par injection SQL. L’analyse statique du code PHP de Snyk signale ce problème comme un risque de sécurité grave. Je vous encourage à suivre la leçon Snyk Learn sur les injections SQL pour comprendre pourquoi le code ci-dessus n’est pas sécurisé et comment empêcher cette vulnérabilité.

Snyk Code détecte les vulnérabilités d’injection SQL dans le code PHP.

Snyk aide également à détecter les bugs courants dans le code PHP susceptibles d’entraîner des problèmes de sécurité. Par exemple, l’utilisation d’une fonction PHP obsolète ou non prise en charge peut introduire des vulnérabilités dans l’application.

Intégrer Snyk aux IDE PHPStorm et VS Code

Snyk s’intègre facilement aux IDE populaires comme PHPStorm et Visual Studio Code, pour vous fournir un retour en temps réel et analyser les vulnérabilités pendant que vous codez.

Après avoir installé le plug-in Snyk pour PHPStorm, vous pouvez lancer les analyses Snyk directement depuis votre IDE. Faites un clic droit sur votre projet dans Project Explorer, sélectionnez Snyk Scan, puis consultez les résultats dans l’onglet Snyk du panneau inférieur.

Intégration de Snyk à VS Code

Pour intégrer Snyk à VS Code, installez l’extension Snyk Vulnerability Scanner depuis la marketplace de VS Code. Une fois l’extension installée, Snyk analyse automatiquement votre projet à la recherche de modèles de code PHP non sécurisé et de dépendances vulnérables dans votre fichier Composer. Vous pouvez également relancer l’analyse d’un projet en ouvrant la palette de commandes (Ctrl+Shift+P), en saisissant Snyk, puis en sélectionnant l’option Snyk: Rescan. Les résultats s’affichent dans un nouvel onglet Snyk dans la barre latérale.

Intégrer l’analyse statique PHP aux pipelines CI/CD

Face à la complexité croissante du développement logiciel et au besoin grandissant d’applications sécurisées, il est plus important que jamais d’intégrer des outils d’analyse statique et de style de code à votre flux de travail de développement PHP. Les pipelines d’intégration continue (CI) et de déploiement continu (CD) constituent un environnement idéal pour automatiser ces processus et préserver la qualité et la sécurité du code tout au long du cycle de développement.

Ces outils ne contribuent pas seulement à préserver la qualité et la cohérence du code : ils constituent aussi une première ligne de défense contre les menaces potentielles. Ils permettent de détecter et de corriger les failles potentielles dès les premières étapes du développement logiciel, et ainsi d’économiser du temps, des efforts et des ressources à long terme.

# An example of integrating PHPStan into a CI/CD pipeline using GitHub Actions

name: PHPStan

on: [push, pull_request]

jobs:
  analysis
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: shivammathur/setup-php@v2
        with:
          php-version: '7.4'
          tools: phpstan
      - run: composer install --no-progress
      - run: phpstan analyse

Dans l’exemple ci-dessus, PHPStan est intégré à un pipeline CI/CD à l’aide de GitHub Actions. L’analyse statique est ainsi exécutée automatiquement à chaque push ou pull request, ce qui permet de détecter les problèmes potentiels tôt et de rendre la revue de code plus efficace.

Les avantages de l’intégration de l’analyse statique à l’automatisation CI

L’intégration de l’analyse statique à votre pipeline CI présente de nombreux avantages :

  • Détecter les bugs tôt : l’analyse statique aide à repérer les problèmes et les failles potentiels dès les premières étapes du développement, réduisant ainsi le temps et le coût nécessaires à leur correction.

  • Améliorer la qualité du code : en imposant le respect des normes de codage et des bonnes pratiques, l’analyse statique favorise un code plus propre et plus facile à maintenir.

  • Renforcer la sécurité : l’analyse statique peut aider à détecter les failles de sécurité dans votre code et à créer des applications plus sécurisées.

Découvrir les outils de style de code

Le thème suivant porte sur le maintien d’un style de code cohérent. Les outils de style de code jouent un rôle essentiel pour appliquer un style uniforme à l’ensemble d’une base de code et rendre le code lisible et facile à maintenir. En imposant de bonnes pratiques de codage, ils peuvent également réduire le risque d’erreurs et de failles de sécurité. Pour cela, nous pouvons utiliser des outils dédiés au style de code PHP : PHPCS, StyleCI et PHP-CS-Fixer.

Pourquoi mettre en place un outil de style de code ?

Les normes de codage sont un ensemble de directives et de bonnes pratiques pour écrire du code. Elles aident les développeurs à produire un code propre, professionnel et sans erreur. L’adoption d’un style de code cohérent améliore la lisibilité du code, en réduit la complexité et favorise sa réutilisation. C’est là qu’interviennent les outils de style de code : ils vérifient automatiquement les problèmes de style et peuvent même les corriger dans certains cas.

Dans le développement PHP, ces outils sont indispensables. Ils aident non seulement à maintenir un style de code cohérent, mais jouent aussi un rôle essentiel dans la détection des failles de sécurité potentielles. C’est primordial dans le contexte actuel des cybermenaces, où la moindre erreur de codage peut entraîner de graves failles de sécurité.

PHP_CodeSniffer (PHPCS)

PHP_CodeSniffer (PHPCS) est un ensemble de deux scripts PHP. Le script principal phpcs analyse les fichiers PHP, JavaScript et CSS pour détecter les violations d’une norme de codage définie. Le second script, phpcbf, corrige automatiquement ces violations.

Vous pouvez installer PHPCS avec Composer :

composer global require "squizlabs/php_codesniffer=*"

Une fois l’installation terminée, vous pouvez exécuter la commande phpcs dans le répertoire de votre projet :

phpcs /path/to/your/php/files

PHPCS affiche les violations des normes de codage qu’il détecte. Par exemple :

FILE: /path/to/your/php/files/example.php
--------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
--------------------------------------------------------------------------------
 20 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 2
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------

Vous pouvez utiliser la commande phpcbf pour corriger automatiquement ces problèmes :

phpcbf /path/to/your/php/files

StyleCI

StyleCI est un service d’intégration continue pour le style de code PHP. Cet outil en ligne s’intègre à vos dépôts GitHub, GitLab ou Bitbucket. Il vérifie chaque push ou pull request afin de s’assurer que le code respecte le style configuré.

Pour utiliser StyleCI, inscrivez-vous sur leur site web et associez vos dépôts.

PHP-CS-Fixer

L’outil PHP-CS-Fixer de FriendsOfPHP détecte et corrige les problèmes de normes de codage dans votre code PHP.

Vous pouvez installer PHP-CS-Fixer avec Composer :

composer global require friendsofphp/php-cs-fixer

Après avoir installé PHP-CS-Fixer, vous pouvez utiliser la commande php-cs-fixer pour corriger votre code :

php-cs-fixer fix /path/to/your/php/files

PHP-CS-Fixer affiche les fichiers qu’il a corrigés :

Fixed all files in 0.123 seconds, 12.000 MB memory used

Conclusion

Dans cet article, nous avons abordé l’importance de l’analyse statique et des outils de style de code dans le développement PHP. Nous avons vu comment ces outils peuvent améliorer la qualité de votre base de code, mais aussi la sécurité globale de votre application.

Les outils d’analyse statique, comme PHPStan, Psalm et Snyk, jouent un rôle essentiel pour repérer dans votre code PHP les problèmes susceptibles d’entraîner des bugs ou des vulnérabilités de sécurité. Ils analysent votre code en profondeur sans l’exécuter, ce qui permet de détecter les erreurs à un stade précoce.

Si vous développez des applications PHP à l’aide de conteneurs, voici quelques ressources à consulter :

Lancez-vous dans les compétitions Capture The Flag

Apprenez à résoudre des défis de capture du drapeau en regardant à la demande notre atelier virtuel d’initiation.

Lire la suite

blog feature snyk container custom base recommendations
Blog

Découvrez Evo Agentic AppSec : une sécurité au rythme du développement de l’IA

Le développement piloté par l’IA dépasse les workflows de sécurité traditionnels. L’AppSec agentique de Snyk s’appuie sur des agents de sécurité pour détecter, corriger et vérifier les vulnérabilités en continu, tandis que les équipes définissent les exigences.

feature insights context
Blog

Les attaques autonomes sont déjà là. La défense doit suivre leur rythme.

Les attaquants autonomes réduisent la fenêtre de défense. Découvrez comment la découverte, la correction, la validation et la prévention continues peuvent aider les équipes de sécurité à suivre le rythme.

illustration hero ai
Blog

L’ouragan de l’IA est là

L’IA accélère à la fois la création de logiciels et les cyberattaques. Les dirigeants doivent sécuriser les agents et le code dès leur conception, appliquer des contrôles à l’exécution et valider les défenses de manière indépendante.