Sécurité PHP expliquée · défensif
Exposition de phpinfo() : pourquoi c’est important et comment corriger
phpinfo() affiche toute la configuration de PHP. Pratique lors de l’installation d’un serveur, c’est un cadeau pour les attaquants une fois oublié en ligne.
Dernière mise à jour
De quoi s’agit-il
Selon le manuel PHP, phpinfo() affiche une grande quantité d’informations sur l’état courant de PHP : options de compilation, extensions, version de PHP, informations serveur, environnement et en-têtes HTTP. Sur un site en production, cela peut inclure des noms d’hôtes de base de données, des clés d’API stockées dans des variables d’environnement et des chemins internes. MITRE classe cette situation en CWE-200.
Comment le détecter
- Cherchez dans la racine web les fichiers qui appellent
phpinfo(et des noms commeinfo.php,phpinfo.phpettest.php. - Demandez ces noms sur vos propres sites et vérifiez s’ils répondent 200. Ne scannez pas les sites qui ne vous appartiennent pas.
- Vérifiez si l’en-tête
X-Powered-Byaffiche la version de PHP ; c’est réglé parexpose_php.
Comment le corriger
- Supprimez les fichiers phpinfo en production. Pour l’information, utilisez
php -isur le serveur ou une page temporaire protégée par authentification, retirée ensuite. - Ajoutez
phpinfoàdisable_functionsdans php.ini si aucune application n’en a besoin. - Réglez
expose_php = Offpour retirer la version des en-têtes de réponse. - Changez tout secret apparu sur une page phpinfo exposée, car vous ne pouvez pas savoir qui l’a vu.
Vérifications en lecture seule et modèles sûrs
# Find leftover phpinfo() files (read-only)
grep -rln "phpinfo\s*(" --include=*.php /var/www 2>/dev/null | grep -v /vendor/
# Check your own site for common file names (only on hosts you own)
for f in phpinfo.php info.php test.php i.php; do
curl -s -o /dev/null -w "%{http_code} $f\n" "https://your-site.example/$f"
done
; php.ini: stop advertising the version and block the function
expose_php = Off
disable_functions = phpinfoAfficher la version de PHP est-il vraiment un problème ?
Ce n’est pas une faille en soi, mais cela indique si un serveur est encore antérieur à 8.2.35, 8.3.36, 8.4.27 ou 8.5.12. La retirer ne coûte rien.
Le panneau de mon hébergeur affiche phpinfo. Est-ce exposé ?
Pas s’il est derrière la connexion au panneau. Le risque est une page phpinfo accessible sans authentification.
Autres classes de vulnérabilités PHP
- Injection d’objets PHP : de quoi s’agit-il et comment corrigerL’injection d’objets PHP survient quand une entrée contrôlée par l’utilisateur atteint unserialize(), qui peut instancier des objets dont les méthodes magiques exécutent une logique choisie par l’attaquant.
- Inclusion de fichiers PHP (LFI/RFI) : de quoi s’agit-il et comment corrigerL’inclusion de fichiers survient quand une entrée utilisateur contrôle le chemin passé à include ou require, ce qui permet de lire des fichiers locaux (LFI) ou, avec allow_url_include activé, d’exécuter du code distant (RFI).
- SSRF en PHP : de quoi s’agit-il et comment corrigerLa falsification de requête côté serveur (SSRF) survient quand une application PHP récupère une URL contrôlée par l’utilisateur, ce qui permet d’atteindre des services internes ou des points de métadonnées cloud via votre serveur.
- XSS en PHP : de quoi s’agit-il et comment s’en protégerLe cross-site scripting (XSS) survient quand une page PHP affiche dans du HTML des données contrôlées par l’utilisateur sans échappement, si bien que le script d’un attaquant s’exécute dans le navigateur d’autres visiteurs.
Sources
Les liens externes quittent ce site. Nous n’hébergeons aucun code d’exploitation.
- phpinfo() — PHP Manual
- Core php.ini directives (open_basedir, expose_php) — PHP Manual
- CWE-200: Exposure of Sensitive Information to an Unauthorized Actor — MITRE CWE