[{"data":1,"prerenderedAt":235},["ShallowReactive",2],{"seo-verification":3,"blog-inventaire-versions-php-parc-sites-clients-agence-fr":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-inventaire-versions-php-parc-sites-clients-agence-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":30,"intro":33,"sections":34,"ctaTitle":173,"ctaBody":174,"ctaButton":175,"ctaUrl":176,"relatedPosts":177},508,"inventaire-versions-php-parc-sites-clients-agence",{"fr":10,"en":12,"ar":13,"es":14},"php-version-inventory-for-client-sites-an-agency-method","جرد-إصدارات-php-لمواقع-العملاء-منهج-للوكالات","inventario-de-versiones-php-de-sitios-cliente-metodo-de-agencia","Inventaire des versions PHP du parc clients : méthode d'agence","Registre des versions PHP de vos sites clients chez plusieurs hébergeurs : paliers d'accès, scripts en lot, lots de priorité, message client et preuve datée.",11,0,false,"2026-10-27T00:00:00+00:00","2026-10-27T23:58:39+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},8,"Sécurité & Monitoring","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Finventaire-versions-php-parc-sites-clients-agence-poster.svg","Quand une faille PHP critique tombe, la question du client est simple : mon site est-il touché ? Pour une agence, y répondre site par site, chez cinq hébergeurs et avec des accès inégaux, prend des jours si rien n'est préparé. Cette méthode tient en une demi-journée pour 20 à 200 sites : une mesure à paliers selon l'accès, un registre qui distingue le présumé du confirmé, des lots de priorité, un message type et une preuve datée de correction. Le même registre se rejoue à chaque CVE et à chaque fin de vie de branche.",[35,39,43,75,97,100,103,115,118,145,148,157,160,163],{"type":36,"title":37,"body":38},"h2","Ce qu'un audit de parc doit produire","Un audit de parc n'est pas une commande lancée une fois. C'est un registre : une ligne par site, avec la version PHP lue, la manière dont elle a été lue, la date et le degré de certitude. Sans ces trois informations, un chiffre ne vaut rien, parce qu'une version lue le mois dernier ne dit rien de l'état d'aujourd'hui.\n\nL'objection habituelle est légitime : vous n'avez pas la main sur l'hébergeur du client, vous ne pouvez pas lancer de commande SSH partout, et vous ne devez pas déposer de fichier de diagnostic sur un site en production. La réponse tient en une idée : on mesure avec ce que l'on a, et on note honnêtement ce que chaque mesure prouve. Un site lu depuis l'extérieur est présumé ; un site lu depuis le serveur est confirmé. Le registre garde les deux et vous dit où il reste du travail.",{"type":40,"title":41,"body":42},"tip","Contexte daté : PHP2Shell","Le 21 octobre 2026, le projet PHP a publié les versions 8.5.12, 8.4.27, 8.3.36 et 8.2.35, qui corrigent CVE-2026-109618 et CVE-2026-109619 (exécution de code à distance sans authentification). PHP 8.1 et les branches plus anciennes ne reçoivent plus de mise à jour du projet ; des rétroports minimaux ont été publiés pour les sources de 7.4, 8.0 et 8.1. L'ajout au catalogue CISA des vulnérabilités exploitées date du 26 octobre 2026, avec une échéance fédérale au 29 octobre 2026. La description des failles et la mise à jour d'un serveur sont traitées dans l'article dédié ; ici, on s'occupe du portefeuille.",{"type":44,"title":45,"headers":46,"rows":50},"comparison","Les quatre paliers de mesure",[47,48,49],"Palier et accès","Ce qu'il prouve","Ce qu'il ne prouve pas",[51,55,59,63,67,71],[52,53,54],"1. Observation externe, aucun accès","Un en-tête X-Powered-By ou Server, quand il existe, suggère une pile et une version","Rien de certain : l'en-tête est souvent masqué, supprimé ou faux. C'est une présomption",[56,57,58],"2. wp-cli ou SSH","La version du binaire PHP en ligne de commande, lue sur la machine","La version servie par le web : le binaire CLI peut différer de PHP-FPM ou d'Apache",[60,61,62],"3. Panneau cPanel, WHM ou Plesk","La version attribuée à chaque domaine, avec le gestionnaire","Le correctif réellement appliqué : un même numéro peut être corrigé ou non selon le paquet",[64,65,66],"4. Docker","La version dans l'image et dans le conteneur en cours d'exécution","Que l'image déployée soit la bonne : comparer image et conteneur vivant",[68,69,70],"Lecture du changelog du paquet","Que le correctif est présent malgré un numéro inchangé (rétroport)","Que le site n'a pas été compromis avant la mise à jour",[72,73,74],"Aucun palier possible","Rien : le site passe en lot 4, à demander au client ou à l'hébergeur","Ne jamais le classer « corrigé » par défaut",{"type":76,"title":77,"steps":78},"steps","Mesurer palier par palier",[79,82,85,88,91,94],{"title":80,"body":81},"Palier 1 : lire les en-têtes sans accès","Préparez `sites.txt`, une URL par ligne, puis lancez `while read -r u; do printf '%s,%s\\n' \"$u\" \"$(curl -sI --max-time 10 \"$u\" | tr -d '\\r' | grep -iE '^(server|x-powered-by):' | tr '\\n' ' ')\"; done \u003C sites.txt > externe.csv`. Chaque ligne donne l'URL et les deux en-têtes trouvés. Une ligne vide est une information : l'en-tête est masqué. Classez ces sites « présumé » et passez au palier suivant dès que possible.",{"title":83,"body":84},"Palier 2 : interroger WordPress avec wp-cli","Sur un site WordPress où wp-cli est installé, `wp cli info` affiche notamment la ligne `PHP binary` et la ligne `PHP version`. Pour extraire la seconde : `wp cli info | grep 'PHP version'`. Notez que cette valeur décrit le binaire utilisé en ligne de commande. Le serveur web peut tourner sous une autre version, notamment quand l'hébergeur propose plusieurs versions par domaine. Pour un contrôle fiable, comparez avec le palier 3.",{"title":86,"body":87},"Palier 2 bis : un script SSH en lot","Avec `hotes.txt` (un alias SSH par ligne) : `while read -r h; do printf '%s,%s\\n' \"$h\" \"$(timeout 20 ssh -n -o BatchMode=yes -o ConnectTimeout=8 \"$h\" \"php -r 'echo PHP_VERSION;'\" 2>\u002Fdev\u002Fnull || echo inconnue)\"; done \u003C hotes.txt > ssh.csv`. Le `-n` empêche ssh d'avaler la liste, `BatchMode` évite qu'un hôte demande un mot de passe et bloque la boucle, `timeout` borne chaque tentative. Les hôtes qui échouent ressortent en « inconnue » au lieu de disparaître : testé avec un hôte en échec et un hôte qui ne répond pas, les deux apparaissent bien dans le CSV.",{"title":89,"body":90},"Palier 3 : lire les panneaux","Dans cPanel, MultiPHP Manager liste chaque domaine avec sa version PHP, ou la mention Inherited quand il suit la valeur système. Dans WHM, le même outil donne la vue par compte. Dans Plesk, la version et le gestionnaire se règlent par domaine dans Sites web et domaines, rubrique Paramètres PHP, selon la version de Plesk. Relevez la version affichée, puis passez à l'étape suivante pour savoir si le correctif est présent.",{"title":92,"body":93},"Rétroports : lire le changelog, pas seulement le numéro","Les distributions et les hébergeurs sous CloudLinux corrigent souvent sans changer le numéro amont. AlmaLinux le dit expressément dans son avis : ne vous fiez pas à `php -v`, comparez le paquet installé avec la version corrigée publiée, par exemple avec `rpm -q php-common`. Pour chercher la mention d'une CVE dans l'historique du paquet : `rpm -q --changelog php-common | grep CVE-2026-109618` sur la famille RHEL, et `apt changelog` suivi du nom du paquet sur Debian et Ubuntu. Absente de l'historique, la CVE n'est pas corrigée dans ce paquet.",{"title":95,"body":96},"Palier 4 : conteneurs","Une image récente ne prouve pas que le conteneur qui tourne l'est aussi. Comparez la version dans l'image et celle du conteneur en cours d'exécution, puis reconstruisez si besoin. La procédure complète est dans l'article sur la reconstruction des images PHP, auquel nous renvoyons pour ne pas la recopier.",{"type":36,"title":98,"body":99},"Pourquoi pas de phpinfo, et surtout pas en public","Le réflexe est de déposer un fichier `phpinfo()` sur le site. Il donne tout, mais il expose aussi les chemins, les modules et la configuration du serveur à quiconque connaît l'adresse, et un fichier oublié devient un point d'entrée pour la reconnaissance. Sur le site d'un client, il y a un second problème : modifier ce site sans mandat écrit est une faute, même pour lire une version.\n\nPar défaut, écartez-le. Si une situation l'impose, un fichier temporaire doit répondre à quatre conditions : l'accord écrit du client, un nom imprévisible, une suppression immédiate après lecture, et une trace de l'opération dans le registre. Dans presque tous les cas, un palier 2 ou 3 rend ce fichier inutile.",{"type":36,"title":101,"body":102},"Le registre : une ligne par site","Un tableur partagé suffit, à condition de tenir les mêmes colonnes pour tout le monde. Le but est qu'un collègue puisse reprendre l'audit sans vous poser de question, et que le client puisse recevoir sa ligne telle quelle.",{"type":104,"title":105,"items":106},"ul","Les colonnes du registre",[107,108,109,110,111,112,113,114],"**Site, client, hébergeur** — l'identité de la ligne, avec l'URL canonique et le contact technique.","**Type d'accès** — aucun, wp-cli, SSH, panneau ou Docker : ce qui détermine le palier atteignable.","**Méthode de mesure** — la commande ou l'écran utilisé, pour que la mesure soit rejouable à l'identique.","**Version lue et SAPI** — le numéro et le mode d'exécution (FPM, module Apache, CLI), car le risque diffère selon le mode.","**Date de mesure** — une version sans date est une opinion.","**Niveau de confiance** — présumé (palier 1) ou confirmé (paliers 2 à 4), plus la mention rétroporté si le changelog le confirme.","**Lot de priorité et statut** — de 1 à 4, puis à faire, prévenu, en cours, corrigé, ou refusé par le client.","**Date et preuve de correction** — la capture, la sortie de commande et le nom de l'opérateur.",{"type":36,"title":116,"body":117},"Classer en lots, pas en liste de courses","Quand le registre est rempli, la question n'est plus « tout est-il à jour ? » mais « par quoi commencer ? ». Quatre lots répondent. Le lot 1 regroupe les sites exposés sur une branche qui ne reçoit plus de correctif du projet PHP (8.1 et antérieures), sauf correctif d'un fournisseur confirmé par le changelog. Le lot 2 : branche encore supportée mais version antérieure au correctif. Le lot 3 : branche corrigée, à confirmer par une mesure de palier 2 ou 3. Le lot 4 : site non joignable ou version inconnue.\n\nTrois critères font monter un site d'un lot : un formulaire public, une boutique, la présence de données personnelles, ou un plugin qui accepte des fichiers envoyés. Un site vitrine statique en lot 2 passe après une boutique en lot 3.",{"type":44,"title":119,"headers":120,"rows":124},"Grille de priorité",[121,122,123],"Lot","Critère","Action",[125,129,133,137,141],[126,127,128],"Lot 1","Exposé, branche sans correctif du projet (8.1 et antérieures)","Migrer ou exiger un paquet corrigé par le fournisseur, prévenir le client le jour même",[130,131,132],"Lot 2","Branche supportée, version antérieure au correctif","Mettre à jour vers la version corrigée de la branche, dans la semaine",[134,135,136],"Lot 3","Branche corrigée, mesure à confirmer","Mesure de palier 2 ou 3, puis passer le niveau de confiance à confirmé",[138,139,140],"Lot 4","Injoignable, accès refusé ou version inconnue","Demander l'accès ou la version au client, relancer et dater chaque demande",[142,143,144],"Aggravant","Formulaire, boutique, données personnelles, upload","Monte le site d'un lot dans l'ordre de traitement",{"type":36,"title":146,"body":147},"Prévenir les clients sans les affoler","Un client n'a pas besoin du détail des deux CVE. Il a besoin de savoir si son site est concerné, ce que vous faites et ce que cela change pour lui. Deux messages courts suffisent, à adapter. Gardez le même ton factuel : la version lue, la date, la suite. N'écrivez pas que le site est protégé ou sécurisé : une version lue n'est pas une preuve d'absence de compromission.",{"type":76,"title":149,"steps":150},"Deux messages types",[151,154],{"title":152,"body":153},"Client informé de l'état de son site","« Bonjour, nous avons relevé la version PHP de votre site le [date]. Elle était [version], antérieure au correctif publié par le projet PHP pour deux failles critiques. Nous la mettons à jour le [date], sans interruption prévue. Nous vous envoyons ensuite la preuve datée de la version en service. Aucune action n'est nécessaire de votre côté. Si vous avez des questions, répondez à ce message. »",{"title":155,"body":156},"Client dont le site ne peut pas être migré tout de suite","« Bonjour, votre site tourne sur une version de PHP qui ne reçoit plus de correctifs du projet. La migration demande [travaux], que nous vous proposons pour le [date]. En attendant, nous [mesure : paquet corrigé par l'hébergeur, retrait du formulaire d'envoi de fichiers, filtrage]. Ces mesures limitent le risque sans le supprimer. Merci de nous confirmer la date retenue avant le [date]. »",{"type":36,"title":158,"body":159},"Prouver la correction, puis rejouer l'audit","La preuve d'une correction est un enregistrement par site : la mesure avant, l'intervention, la même mesure après, la capture ou la sortie de commande, le numéro de version, la date et le nom de l'opérateur. Rejouer la même mesure, avec la même méthode, est ce qui rend la preuve comparable. Conservez le journal avec le registre.\n\nGardez en tête la limite : une version lue prouve la version servie à l'instant de la mesure, pas l'absence d'intrusion avant la mise à jour. Si un site est resté exposé après le 21 octobre 2026, la recherche de traces d'exploitation est un second chantier, décrit dans l'article PHP2Shell.",{"type":36,"title":161,"body":162},"La cadence : un audit par trimestre, et à chaque déclencheur","Rejouez l'audit chaque trimestre, plus à chaque nouvelle CVE critique et à chaque fin de vie de branche. Comparez les deux mesures : une dérive, c'est un site dont la version a baissé ou dont le niveau de confiance est redevenu présumé. Reportez dans le registre les dates de fin de vie qui comptent. Pour PHP 8.2, le projet indique le 31 décembre 2026 ; la checklist de migration vers 8.3 ou 8.4 est dans l'article dédié. Le premier lot de l'audit suivant est déjà connu : tout ce qui tourne encore sur 8.2 le 1er janvier.",{"type":104,"title":164,"items":165},"La documentation officielle",[166,167,168,169,170,171,172],"**Avis PHP du 21 octobre 2026** — https:\u002F\u002Fwww.php.net\u002Farchive\u002F2026.php#2026-10-21-5","**Versions supportées de PHP** — https:\u002F\u002Fwww.php.net\u002Fsupported-versions.php","**Alerte CISA du 26 octobre 2026** — https:\u002F\u002Fwww.cisa.gov\u002Fnews-events\u002Falerts\u002F2026\u002F10\u002F26\u002Fcisa-adds-two-known-exploited-vulnerabilities-catalog","**Dépôt NCSC-NL php2shell** — https:\u002F\u002Fgithub.com\u002FNCSC-NL\u002Fphp2shell","**Avis AlmaLinux sur les paquets corrigés** — https:\u002F\u002Falmalinux.org\u002Fblog\u002F2026-10-21-php2shell-cve-2026-109618-cve-2026-109619\u002F","**MultiPHP Manager (cPanel)** — https:\u002F\u002Fdocs.cpanel.net\u002Fcpanel\u002Fsoftware\u002Fmultiphp-manager-for-cpanel\u002F","**wp cli info** — https:\u002F\u002Fdeveloper.wordpress.org\u002Fcli\u002Fcommands\u002Fcli\u002Finfo\u002F","Un seul endroit pour lire et imposer la version PHP de chaque compte","Quand les sites clients sont répartis chez plusieurs hébergeurs, chaque audit repart de zéro : accès à récolter, versions hétérogènes, renouvellements dispersés. Un hébergement revendeur Agency S (WHM, marque blanche) ou une flotte de VPS regroupe les comptes au même endroit : une interface pour lire la version PHP de chaque compte, l'imposer et en garder la preuve. Les offres Agency incluent des sauvegardes quotidiennes.","Découvrir les solutions pour agences","\u002Fsolutions\u002Fagences",[178,195,216],{"id":179,"slug":180,"slugs":181,"title":185,"excerpt":186,"readTime":187,"views":188,"isPinned":19,"publishedAt":189,"updatedAt":190,"category":191,"categories":192,"featuredImage":30,"bgImage":31,"posterImage":194,"relatedSolution":30},489,"php2shell-cve-2026-109618-109619-mettre-a-jour-php",{"fr":180,"en":182,"ar":183,"es":184},"php2shell-cve-2026-109618-109619-patch-php","php2shell-cve-2026-109618-109619-تحديث-php","php2shell-cve-2026-109618-109619-actualizar-php","PHP2Shell : corriger CVE-2026-109618 et CVE-2026-109619","PHP2Shell : deux failles critiques de PHP exploitables sans compte. Versions corrigées, commandes de mise à jour par système et parades temporaires.",16,1,"2026-10-22T00:00:00+00:00","2026-10-27T23:58:43+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[193],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fphp2shell-cve-2026-109618-109619-mettre-a-jour-php-poster.svg",{"id":196,"slug":197,"slugs":198,"title":202,"excerpt":203,"readTime":17,"views":204,"isPinned":19,"publishedAt":205,"updatedAt":206,"category":207,"categories":213,"featuredImage":30,"bgImage":31,"posterImage":215,"relatedSolution":30},206,"php-82-fin-de-vie-checklist-migration",{"fr":197,"en":199,"ar":200,"es":201},"php-82-end-of-life-planning-your-migration","نهاية-دعم-php-82-دليل-الترحيل","php-82-fin-de-vida-planificar-la-migracion","PHP 8.2 fin de vie : checklist de migration","PHP 8.2 atteint son EOL le 31 décembre 2026. Inventaire, tableau comparatif, checklist de migration et dépannage pour passer à PHP 8.3 ou 8.4 sans interruption.",7,"2026-08-01T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":208,"name":209,"slug":210,"color":211,"icon":212},4,"Développement","developpement","bg-warning\u002F10 text-warning","dev",[214],{"id":208,"name":209,"slug":210,"color":211,"icon":212},"\u002Fblog\u002Fcovers\u002Fphp-82-fin-de-vie-checklist-migration-poster.svg",{"id":217,"slug":218,"slugs":219,"title":223,"excerpt":224,"readTime":225,"views":18,"isPinned":19,"publishedAt":226,"updatedAt":227,"category":228,"categories":229,"featuredImage":30,"bgImage":31,"posterImage":231,"relatedSolution":232},501,"php2shell-docker-wordpress-reconstruire-images-php",{"fr":218,"en":220,"ar":221,"es":222},"php2shell-docker-rebuild-php-wordpress-images","php2shell-docker-إعادة-بناء-صور-php-ووردبريس","php2shell-docker-reconstruir-imagenes-php-wordpress","PHP2Shell et Docker : reconstruire vos images PHP et WordPress","WordPress ou Laravel à jour ne change pas le PHP de l'image Docker. Prouvez la version servie, repérez les tags qui ont bougé et reconstruisez sans piège.",12,"2026-10-23T00:00:00+00:00","2026-10-23T23:43:01+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[230],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fphp2shell-docker-wordpress-reconstruire-images-php-poster.svg",{"categorySlug":233,"appSlug":234},"cms","wordpress",1793145918449]