Skip to main content

Ce qu’il faut savoir sur la sécurité du code PHP

Écrit par

4 septembre 2024

0 minutes de lecture

PHP est un langage de script très répandu dans le développement web. Cette popularité rend indispensable la compréhension des risques de sécurité potentiels et des mesures permettant de les atténuer. Que vous déployiez des applications CMS avec WordPress ou développiez des applications d’entreprise avec le framework PHP Laravel, il est essentiel que les développeurs maîtrisent l’importance de la sécurité PHP et l’impact métier de certaines vulnérabilités notables de l’interpréteur PHP.

Pourquoi est-il important de se protéger contre les vulnérabilités de sécurité PHP ? En raison de sa popularité et de son utilisation répandue, PHP est souvent la cible de pirates et d’acteurs malveillants. Des vulnérabilités peuvent apparaître pour diverses raisons, notamment de mauvaises pratiques de codage, l’absence de nettoyage des entrées utilisateur et l’utilisation de versions obsolètes.

Prenons par exemple le cas d’une entrée utilisateur non nettoyée utilisée dans une requête SQL. Cela peut entraîner une injection SQL, une vulnérabilité courante.

$id = $_GET['id'];
$sql = "SELECT * FROM users WHERE id = $id";

Dans le code présenté, un utilisateur malveillant peut manipuler le paramètre id de l’URL pour réaliser une injection SQL. Pour l’éviter, il est essentiel de nettoyer les entrées utilisateur, par exemple à l’aide de mysqli_real_escape_string ou de requêtes préparées :

$id = mysqli_real_escape_string($conn, $_GET['id']);
$sql = "SELECT * FROM users WHERE id = $id";

Les vulnérabilités de sécurité dans vos applications PHP peuvent avoir de lourdes conséquences sur votre activité. Elles peuvent entraîner des violations de données et de lourdes amendes en cas de non-respect des réglementations sur la protection des données, comme le RGPD et la CCPA. Une violation peut aussi éroder la confiance des clients et entraîner une perte d’activité. De plus, les coûts de correction peuvent être élevés, surtout si les vulnérabilités sont détectées tard dans le cycle de développement. C’est pourquoi la sécurité doit être une priorité dès le début du projet.

FAQ associées

Comment protéger mon application PHP des vulnérabilités ?

Validez et assainissez toujours les entrées utilisateur. Utilisez des requêtes préparées avec des paramètres pour éviter les injections SQL. Utilisez les dernières versions de PHP et de ses frameworks, qui intègrent des correctifs pour les vulnérabilités connues. Analysez régulièrement votre code, vos dépendances et la configuration de votre infrastructure cloud avec des outils comme Snyk afin de détecter les vulnérabilités. Suivez les bonnes pratiques de codage sécurisé.

Pourquoi la sécurité PHP est-elle importante ?

La sécurité PHP est essentielle : une application PHP vulnérable peut entraîner des fuites de données, une perte de confiance des clients et des amendes réglementaires. PHP étant souvent utilisé pour développer des applications web, il est fréquemment ciblé par les attaquants. Sécuriser votre code PHP contribue à protéger les données de vos utilisateurs et votre entreprise.

Qu’est-ce qu’un scanner de vulnérabilités PHP ?

Un scanner de vulnérabilités PHP est un outil qui analyse automatiquement votre code PHP à la recherche de vulnérabilités de sécurité connues. Snyk et le vérificateur de sécurité intégré à Composer en sont des exemples. Ces outils vous aident à détecter et à corriger les problèmes de sécurité dans vos applications PHP.

Qu’est-ce qu’un avis de sécurité PHP ?

Un avis de sécurité PHP est une annonce publique concernant une vulnérabilité dans un composant PHP. Il fournit des informations sur la vulnérabilité, ses conséquences potentielles et la façon de la corriger. PHP.net et d’autres sites consacrés à PHP publient souvent ces avis. Snyk tient également à jour une base de données des avis de sécurité PHP basée sur le gestionnaire de paquets Composer.

Vulnérabilités de sécurité PHP courantes

Découvrons quelques vulnérabilités de sécurité PHP courantes et des ressources utiles pour aider les développeurs à les atténuer.

Cookies et gestion des sessions

Les cookies et les sessions sont des éléments fondamentaux du développement web : ils nous permettent de conserver l’état entre les requêtes. Toutefois, s’ils sont mal gérés, ils peuvent introduire de graves failles de sécurité.

En PHP, et notamment avec un framework web comme Laravel, il est important de sécuriser les cookies et les données de session lors de la gestion de l’authentification. Voici quelques conseils :

  • Utilisez toujours des cookies sécurisés et accessibles uniquement via HTTP.

  • Privilégiez la valeur Lax ou Strict pour l’attribut SameSite afin d’éviter les attaques par falsification de requêtes intersites (CSRF).

  • Régénérez l’identifiant de session après une connexion ou un changement de mot de passe afin d’éviter les attaques par fixation de session.

Dans Laravel, vous pouvez définir ces paramètres dans votre fichier config/session.php :

'cookie' => env(
    'SESSION_COOKIE',
    Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
),
'cookie_secure' => env('SESSION_SECURE_COOKIE', null),
'cookie_same_site' => 'lax',

Consultez d’autres recommandations de sécurité web pour sécuriser les applications Laravel et vous protéger contre les vulnérabilités de sécurité PHP.

Injection SQL

L’injection SQL est une technique d’injection de code qui permet aux attaquants d’exploiter les vulnérabilités des requêtes à la base de données d’une application web. Elle peut donner accès à des données sensibles sans autorisation, ou permettre leur modification ou leur suppression.

Considérez le code PHP vulnérable suivant :

$id = $_GET['id'];
$result = mysqli_query($con, "SELECT * FROM users WHERE id = $id");

Un attaquant peut manipuler le paramètre id de l’URL pour modifier la requête SQL. Pour éviter cela, utilisez des requêtes préparées :

$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("s", $_GET['id']);
$stmt->execute();

Pour en savoir plus sur l’injection SQL et la sécurité PHP, consultez cette formation gratuite sur la sécurité PHP.

Injection de code

L’injection de code est une autre vulnérabilité courante qui permet à un attaquant d’injecter et d’exécuter du code arbitraire dans votre application. En PHP, cela se produit souvent lorsque des entrées utilisateur sont transmises à la fonction eval() ou à des appels système sans validation ni nettoyage appropriés.

Prenons le cas d’un projet PHP Laravel dans lequel un développeur cherchait à générer dynamiquement l’URL d’une image dans un modèle Blade. L’objectif était d’afficher une image dont le chemin était construit à partir d’un contenu variable et de la fonction d’aide URL de Laravel. Pour cela, le développeur a utilisé la fonction PHP eval() comme suit :

<?php
  eval("\$image_url = \"{{ url('public/uploads/trust/".$value.".jpg') }}\";");
?>

<img src="{{ $image_url }}" />

Le développeur souhaitait créer une méthode flexible pour générer des URL d’image à partir de la variable $value. Cependant, l’utilisation de eval() soulève d’importants problèmes de sécurité, notamment :

  • Injection de code : si un attaquant peut influencer le contenu de la chaîne transmise à eval(), il peut exécuter du code PHP arbitraire sur le serveur. Cela peut entraîner un accès non autorisé, des violations de données et diverses autres failles de sécurité.

  • Débogage et maintenance complexes : le code exécuté via eval() est souvent plus difficile à déboguer et à maintenir, car il peut masquer la logique et le déroulement de l’application. Cette complexité peut involontairement introduire d’autres failles de sécurité ou bogues.

Le développeur aurait pu adopter une approche plus sûre et plus facile à maintenir en utilisant le moteur de modèles Blade de Laravel pour générer l’URL de l’image :

<img src="{{ url('public/uploads/trust/'.$value.'.jpg') }}" />

Cette méthode évite complètement eval() et s’appuie sur les fonctionnalités intégrées de Laravel pour générer du contenu dynamique en toute sécurité. Découvrez d’autres moyens d’éviter l’injection de code PHP.

Tester les dépendances PHP Composer pour détecter les vulnérabilités de sécurité

Les dépendances tierces sont un aspect souvent négligé de la sécurité des applications. En PHP, Composer permet de les gérer. Il est essentiel de vérifier régulièrement si vos dépendances présentent des vulnérabilités connues.

Vous pouvez utiliser des outils comme Snyk pour analyser automatiquement vos dépendances Composer à la recherche de vulnérabilités connues. Voici comment installer et utiliser Snyk :

npm install -g snyk
snyk test

Lorsque vous exécutez la commande snyk test à la racine du projet pour rechercher des vulnérabilités de sécurité dans vos dépendances Composer, le résultat peut ressembler à ceci :

Testing /path/to/your/laravel-project/composer.lock...

✗ High severity vulnerability found in symfony/http-foundation
  Description: Arbitrary Code Execution
  Info: https://snyk.io/vuln/SNYK-PHP-SYMFONY-174006
  Introduced through: symfony/http-foundation@5.4.0
  From: symfony/http-foundation@5.4.0
  From: symfony/http-foundation@5.4.0 > symfony/http-foundation@5.4.0
  From: symfony/http-foundation@5.4.0 > symfony/http-foundation@5.4.0 > symfony/http-foundation@5.4.0
  From: symfony/http-foundation@5.4.0 > symfony/http-foundation@5.4.0 > symfony/http-foundation@5.4.0 > symfony/http-foundation@5.4.0
  Fix: Upgrade to symfony/http-foundation@5.4.1

Tested 123 dependencies for known vulnerabilities, found 1 vulnerabilities, 122 vulnerable paths.

Je vous recommande vivement d’en savoir plus sur les tests de sécurité des dépendances PHP Composer avec Snyk.

Vulnérabilités de sécurité de l’interpréteur PHP

Même si vous suivez des pratiques de codage sécurisées, des vulnérabilités dans l’interpréteur PHP lui-même peuvent exposer vos applications à des risques. Par exemple, plusieurs vulnérabilités ont été signalées dans le paquet PHP 8.2 de Debian. Vous pouvez les consulter dans la base de données Snyk.

Parmi les vulnérabilités notables de l’interpréteur PHP, citons :

Ces vulnérabilités peuvent permettre à un attaquant d’exécuter du code arbitraire ou de provoquer un déni de service (DoS). Il est donc essentiel de maintenir votre version de PHP à jour et de vérifier régulièrement si des vulnérabilités ont été signalées dans l’interpréteur PHP que vous utilisez.

Comment Snyk contribue-t-il à la sécurité du code PHP ?

Snyk est une puissante plateforme de sécurité conçue pour les développeurs. Elle les aide à détecter et à corriger les vulnérabilités de leurs applications PHP. Grâce à une vaste base de données de vulnérabilités connues, Snyk peut analyser automatiquement votre projet pour repérer ces problèmes. Snyk propose également des PR de correction automatisées, qui peuvent faire gagner beaucoup de temps aux développeurs.

Quelles sont les vulnérabilités PHP les plus courantes ?

Les développeurs doivent connaître plusieurs vulnérabilités PHP courantes, notamment :

  1. Attaques par injection : elles se produisent lorsqu’un attaquant peut insérer du code SQL ou un script malveillant dans votre code PHP. L’injection SQL en est un exemple : l’attaquant manipule les requêtes SQL pour obtenir un accès non autorisé à la base de données.

  2. Cross-site scripting (XSS) : cette attaque se produit lorsqu’un attaquant peut injecter des scripts malveillants dans des pages Web consultées par d’autres utilisateurs. Ces scripts peuvent alors dérober des données sensibles.

  3. Cross-site request forgery (CSRF) : dans ce type d’attaque, un attaquant incite une victime à envoyer une requête malveillante.

  4. Vulnérabilités d’inclusion de fichiers : elles se produisent lorsqu’un attaquant peut inclure un fichier provenant d’un serveur distant, ce qui entraîne souvent l’exécution de code sur le serveur.

Quelles sont les prochaines étapes pour la sécurité PHP ?

Pour rester informé des vulnérabilités de l’interpréteur PHP, vous pouvez connecter vos dépôts Git à Snyk. Snyk surveillera automatiquement vos dépendances, vous avertira des vulnérabilités connues et vous informera de tout nouveau signalement. Vous déployez peut-être vos applications PHP avec Docker ou une autre technologie de conteneurisation. Il est alors essentiel de surveiller vos images de conteneurs à la recherche de vulnérabilités, car elles incluent l’interpréteur PHP et d’autres dépendances potentiellement vulnérables.

Si vous utilisez Docker, vous pouvez vous servir de Snyk pour analyser vos images de conteneurs Docker à la recherche de vulnérabilités connues en exécutant la commande suivante :

snyk container test your-docker-image

Suivez les bonnes pratiques de James Walker pour créer un Dockerfile PHP prêt pour la production et le guide de Neema Muganga sur la sécurisation des conteneurs PHP pour protéger vos images de conteneurs PHP.

La protection contre les vulnérabilités de sécurité PHP ne doit pas être une réflexion de dernière minute : elle doit faire partie intégrante de votre processus de développement. Elle passe par des pratiques de codage sécurisées, des mises à jour régulières et une vigilance constante face aux vulnérabilités signalées dans l’écosystème PHP.

Comment en savoir plus sur la sécurité de PHP ?

Pour en savoir plus sur la sécurité de PHP, vous pouvez consulter les tutoriels en ligne du blog Snyk et suivre gratuitement de courtes leçons en ligne sur Snyk Learn. Des sites comme OWASP proposent également de nombreuses ressources sur la sécurité des applications web, notamment en PHP.

Sécurisez votre code pendant le développement

Snyk analyse votre code pour détecter les problèmes de qualité et de sécurité, et vous conseille sur leur correction directement dans votre IDE.

Publié dans:

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.