[{"data":1,"prerenderedAt":235},["ShallowReactive",2],{"seo-verification":3,"blog-inventario-de-versiones-php-de-sitios-cliente-metodo-de-agencia-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-inventario-de-versiones-php-de-sitios-cliente-metodo-de-agencia-es",{"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,"inventario-de-versiones-php-de-sitios-cliente-metodo-de-agencia",{"fr":12,"en":13,"ar":14,"es":10},"inventaire-versions-php-parc-sites-clients-agence","php-version-inventory-for-client-sites-an-agency-method","جرد-إصدارات-php-لمواقع-العملاء-منهج-للوكالات","Inventario de versiones PHP de sitios cliente: método de agencia","Registro de la versión PHP de cada sitio cliente en varios proveedores: niveles de acceso, scripts por lotes, prioridades, mensaje al cliente y prueba fechada.",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,"Seguridad y monitorización","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","Cuando aparece un fallo crítico de PHP, la pregunta del cliente es simple: ¿mi sitio está afectado? Para una agencia, responder sitio por sitio, en cinco proveedores y con accesos desiguales, lleva días si nada está preparado. Este método cabe en media jornada para 20 a 200 sitios: medición por niveles según el acceso, un registro que separa lo presunto de lo confirmado, lotes de prioridad, un mensaje tipo y una prueba fechada de la corrección. El mismo registro se repite con cada CVE y con cada fin de vida de rama.",[35,39,43,75,97,100,103,115,118,145,148,157,160,163],{"type":36,"title":37,"body":38},"h2","Qué debe producir una auditoría de cartera","Una auditoría de cartera no es un comando que se lanza una vez. Es un registro: una fila por sitio, con la versión PHP leída, cómo se leyó, la fecha y el grado de certeza. Sin estos tres datos una cifra no vale nada, porque una versión leída el mes pasado no dice nada del estado de hoy.\n\nLa objeción habitual es legítima: no controla el proveedor del cliente, no puede lanzar comandos SSH en todas partes y no debe dejar un archivo de diagnóstico en un sitio en producción. La respuesta es una idea: se mide con lo que se tiene y se anota con honestidad lo que prueba cada medición. Un sitio leído desde fuera es presunto; un sitio leído desde el servidor es confirmado. El registro conserva ambos y muestra dónde queda trabajo.",{"type":40,"title":41,"body":42},"tip","Contexto fechado: PHP2Shell","El 21 de octubre de 2026, el proyecto PHP publicó las versiones 8.5.12, 8.4.27, 8.3.36 y 8.2.35, que corrigen CVE-2026-109618 y CVE-2026-109619 (ejecución remota de código sin autenticación). PHP 8.1 y las ramas anteriores ya no reciben actualizaciones del proyecto; se publicaron retroportes mínimos del código fuente para 7.4, 8.0 y 8.1. La incorporación al catálogo de vulnerabilidades explotadas de CISA data del 26 de octubre de 2026, con un plazo federal al 29 de octubre de 2026. Los fallos y la actualización de un servidor se tratan en el artículo dedicado; aquí nos ocupamos de la cartera.",{"type":44,"title":45,"headers":46,"rows":50},"comparison","Los cuatro niveles de medición",[47,48,49],"Nivel y acceso","Qué prueba","Qué no prueba",[51,55,59,63,67,71],[52,53,54],"1. Observación externa, sin acceso","Una cabecera X-Powered-By o Server, cuando existe, sugiere una pila y una versión","Nada seguro: la cabecera suele estar oculta, eliminada o ser falsa. Es una presunción",[56,57,58],"2. wp-cli o SSH","La versión del binario PHP de línea de comandos, leída en la máquina","La versión servida en la web: el binario CLI puede diferir de PHP-FPM o Apache",[60,61,62],"3. Panel cPanel, WHM o Plesk","La versión asignada a cada dominio, con su manejador","La corrección realmente aplicada: el mismo número puede estar corregido o no según el paquete",[64,65,66],"4. Docker","La versión en la imagen y en el contenedor en ejecución","Que la imagen desplegada sea la correcta: comparar imagen y contenedor vivo",[68,69,70],"Lectura del changelog del paquete","Que la corrección está presente aunque el número no cambie (retroporte)","Que el sitio no fuera comprometido antes de la actualización",[72,73,74],"Ningún nivel posible","Nada: el sitio pasa al lote 4, a pedir al cliente o al proveedor","No clasificarlo nunca como corregido por defecto",{"type":76,"title":77,"steps":78},"steps","Medir nivel por nivel",[79,82,85,88,91,94],{"title":80,"body":81},"Nivel 1: leer las cabeceras sin acceso","Prepare `sites.txt`, una URL por línea, y ejecute `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`. Cada línea da la URL y las dos cabeceras encontradas. Una línea vacía es información: la cabecera está oculta. Clasifique estos sitios como presuntos y pase al nivel siguiente en cuanto pueda.",{"title":83,"body":84},"Nivel 2: consultar WordPress con wp-cli","En un sitio WordPress con wp-cli instalado, `wp cli info` muestra, entre otras, una línea `PHP binary` y una línea `PHP version`. Para extraer la segunda: `wp cli info | grep 'PHP version'`. Tenga en cuenta que este valor describe el binario usado en línea de comandos. El servidor web puede funcionar con otra versión, sobre todo cuando el proveedor ofrece varias versiones por dominio. Para una comprobación fiable, compare con el nivel 3.",{"title":86,"body":87},"Nivel 2 bis: un script SSH por lotes","Con `hotes.txt` (un alias SSH por línea): `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`. El `-n` impide que ssh se trague la lista, `BatchMode` evita que un host pida contraseña y bloquee el bucle, `timeout` acota cada intento. Los hosts que fallan aparecen como \"inconnue\" en lugar de desaparecer: probado con un host que falla y otro que no responde, ambos aparecen en el CSV.",{"title":89,"body":90},"Nivel 3: leer los paneles","En cPanel, MultiPHP Manager lista cada dominio con su versión PHP, o la mención Inherited cuando sigue el valor del sistema. En WHM, la misma herramienta da la vista por cuenta. En Plesk, la versión y el manejador se configuran por dominio en Sitios web y dominios, sección de ajustes de PHP, según la versión de Plesk. Anote la versión mostrada y pase al paso siguiente para saber si la corrección está presente.",{"title":92,"body":93},"Retroportes: leer el changelog, no solo el número","Las distribuciones y los proveedores con CloudLinux suelen corregir sin cambiar el número original. AlmaLinux lo dice expresamente en su aviso: no se fíe de `php -v`, compare el paquete instalado con la versión corregida publicada, por ejemplo con `rpm -q php-common`. Para buscar una CVE en el historial del paquete: `rpm -q --changelog php-common | grep CVE-2026-109618` en la familia RHEL, y `apt changelog` seguido del nombre del paquete en Debian y Ubuntu. Si la CVE no aparece en el historial, no está corregida en ese paquete.",{"title":95,"body":96},"Nivel 4: contenedores","Una imagen reciente no prueba que el contenedor en ejecución también lo sea. Compare la versión de la imagen con la del contenedor en ejecución y reconstruya si es necesario. El procedimiento completo está en el artículo sobre la reconstrucción de imágenes PHP, al que remitimos para no copiarlo.",{"type":36,"title":98,"body":99},"Por qué no phpinfo, y nunca en público","El reflejo es dejar un archivo `phpinfo()` en el sitio. Lo muestra todo, pero también expone rutas, módulos y configuración del servidor a cualquiera que conozca la dirección, y un archivo olvidado se convierte en un punto de entrada para el reconocimiento. En el sitio de un cliente hay un segundo problema: modificar ese sitio sin mandato escrito es una falta, incluso solo para leer una versión.\n\nPor defecto, descártelo. Si una situación lo impone, un archivo temporal debe cumplir cuatro condiciones: el acuerdo escrito del cliente, un nombre imprevisible, su eliminación inmediata tras la lectura y una anotación de la operación en el registro. En casi todos los casos, una medición de nivel 2 o 3 hace innecesario el archivo.",{"type":36,"title":101,"body":102},"El registro: una fila por sitio","Basta una hoja de cálculo compartida, siempre que todos mantengan las mismas columnas. El objetivo es que un compañero pueda retomar la auditoría sin hacerle preguntas y que el cliente pueda recibir su fila tal cual.",{"type":104,"title":105,"items":106},"ul","Las columnas del registro",[107,108,109,110,111,112,113,114],"**Sitio, cliente, proveedor** — la identidad de la fila, con la URL canónica y el contacto técnico.","**Tipo de acceso** — ninguno, wp-cli, SSH, panel o Docker: lo que determina el nivel alcanzable.","**Método de medición** — el comando o la pantalla utilizados, para que la medición se pueda repetir idéntica.","**Versión leída y SAPI** — el número y el modo de ejecución (FPM, módulo Apache, CLI), porque el riesgo varía según el modo.","**Fecha de medición** — una versión sin fecha es una opinión.","**Nivel de confianza** — presunto (nivel 1) o confirmado (niveles 2 a 4), más la mención de retroporte si el changelog lo confirma.","**Lote de prioridad y estado** — del 1 al 4, luego pendiente, avisado, en curso, corregido o rechazado por el cliente.","**Fecha y prueba de corrección** — la captura, la salida del comando y el nombre del operador.",{"type":36,"title":116,"body":117},"Clasificar en lotes, no en una lista de la compra","Cuando el registro está lleno, la pregunta ya no es «¿está todo al día?» sino «¿por dónde empezamos?». Cuatro lotes responden. El lote 1 agrupa los sitios expuestos en una rama que ya no recibe correcciones del proyecto PHP (8.1 y anteriores), salvo corrección de un proveedor confirmada por el changelog. El lote 2: rama aún soportada pero versión anterior a la corrección. El lote 3: rama corregida, por confirmar con una medición de nivel 2 o 3. El lote 4: sitio inalcanzable o versión desconocida.\n\nTres criterios hacen subir un sitio de lote: un formulario público, una tienda, datos personales o un complemento que acepta archivos enviados. Un sitio escaparate estático en el lote 2 va después de una tienda en el lote 3.",{"type":44,"title":119,"headers":120,"rows":124},"Cuadrícula de prioridad",[121,122,123],"Lote","Criterio","Acción",[125,129,133,137,141],[126,127,128],"Lote 1","Expuesto, rama sin corrección del proyecto (8.1 y anteriores)","Migrar o exigir un paquete corregido por el proveedor, avisar al cliente el mismo día",[130,131,132],"Lote 2","Rama soportada, versión anterior a la corrección","Actualizar a la versión corregida de la rama, dentro de la semana",[134,135,136],"Lote 3","Rama corregida, medición por confirmar","Medición de nivel 2 o 3 y luego pasar la confianza a confirmado",[138,139,140],"Lote 4","Inalcanzable, acceso denegado o versión desconocida","Pedir al cliente el acceso o la versión, insistir y fechar cada petición",[142,143,144],"Agravante","Formulario, tienda, datos personales, subida de archivos","Sube el sitio un lote en el orden de tratamiento",{"type":36,"title":146,"body":147},"Avisar a los clientes sin alarmarlos","Un cliente no necesita el detalle de las dos CVE. Necesita saber si su sitio está afectado, qué hace usted y qué cambia para él. Bastan dos mensajes cortos, para adaptar. Mantenga el mismo tono factual: la versión leída, la fecha, lo que sigue. No escriba que el sitio está protegido o asegurado: una versión leída no es una prueba de ausencia de compromiso.",{"type":76,"title":149,"steps":150},"Dos mensajes tipo",[151,154],{"title":152,"body":153},"Cliente informado del estado de su sitio","«Hola, leímos la versión PHP de su sitio el [fecha]. Era la [versión], anterior a la corrección publicada por el proyecto PHP para dos fallos críticos. La actualizamos el [fecha], sin interrupción prevista. Después le enviaremos la prueba fechada de la versión en servicio. No necesita hacer nada. Si tiene preguntas, responda a este mensaje.»",{"title":155,"body":156},"Cliente cuyo sitio no puede migrarse enseguida","«Hola, su sitio funciona con una versión de PHP que ya no recibe correcciones del proyecto. La migración requiere [trabajos], que le proponemos para el [fecha]. Mientras tanto, aplicamos [medida: paquete corregido por el proveedor, retirada del formulario de envío de archivos, filtrado]. Estas medidas reducen el riesgo sin eliminarlo. Confírmenos la fecha elegida antes del [fecha].»",{"type":36,"title":158,"body":159},"Probar la corrección y repetir la auditoría","La prueba de una corrección es un registro por sitio: la medición antes, la intervención, la misma medición después, la captura o la salida del comando, el número de versión, la fecha y el nombre del operador. Repetir la misma medición con el mismo método es lo que hace comparable la prueba. Conserve el diario junto al registro.\n\nTenga presente el límite: una versión leída prueba la versión servida en el momento de la medición, no la ausencia de intrusión antes de la actualización. Si un sitio siguió expuesto después del 21 de octubre de 2026, la búsqueda de rastros de explotación es un segundo trabajo, descrito en el artículo sobre PHP2Shell.",{"type":36,"title":161,"body":162},"La cadencia: una auditoría por trimestre y en cada desencadenante","Repita la auditoría cada trimestre, además de con cada nueva CVE crítica y cada fin de vida de rama. Compare las dos mediciones: una deriva es un sitio cuya versión ha bajado o cuyo nivel de confianza ha vuelto a presunto. Anote en el registro las fechas de fin de vida que importan. Para PHP 8.2, el proyecto indica el 31 de diciembre de 2026; la lista de comprobación de migración a 8.3 u 8.4 está en el artículo dedicado. El primer lote de la siguiente auditoría ya se conoce: todo lo que siga en 8.2 el 1 de enero.",{"type":104,"title":164,"items":165},"La documentación oficial",[166,167,168,169,170,171,172],"**Aviso de PHP del 21 de octubre de 2026** — https:\u002F\u002Fwww.php.net\u002Farchive\u002F2026.php#2026-10-21-5","**Versiones soportadas de PHP** — https:\u002F\u002Fwww.php.net\u002Fsupported-versions.php","**Alerta de CISA del 26 de octubre de 2026** — https:\u002F\u002Fwww.cisa.gov\u002Fnews-events\u002Falerts\u002F2026\u002F10\u002F26\u002Fcisa-adds-two-known-exploited-vulnerabilities-catalog","**Repositorio php2shell de NCSC-NL** — https:\u002F\u002Fgithub.com\u002FNCSC-NL\u002Fphp2shell","**Aviso de AlmaLinux sobre los paquetes corregidos** — 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 solo lugar para leer e imponer la versión PHP de cada cuenta","Cuando los sitios cliente están repartidos entre varios proveedores, cada auditoría parte de cero: accesos que reunir, versiones heterogéneas, renovaciones dispersas. Un alojamiento de revendedor Agency S (WHM, marca blanca) o una flota de VPS reúne las cuentas en un mismo sitio: una interfaz para leer la versión PHP de cada cuenta, imponerla y conservar la prueba. Los planes Agency incluyen copias de seguridad diarias.","Descubrir las soluciones para agencias","\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-actualizar-php",{"fr":182,"en":183,"ar":184,"es":180},"php2shell-cve-2026-109618-109619-mettre-a-jour-php","php2shell-cve-2026-109618-109619-patch-php","php2shell-cve-2026-109618-109619-تحديث-php","PHP2Shell: cómo corregir CVE-2026-109618 y CVE-2026-109619","PHP2Shell: dos fallos críticos de PHP explotables sin cuenta. Versiones corregidas, comandos de actualización por sistema y medidas temporales.",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-vida-planificar-la-migracion",{"fr":199,"en":200,"ar":201,"es":197},"php-82-fin-de-vie-checklist-migration","php-82-end-of-life-planning-your-migration","نهاية-دعم-php-82-دليل-الترحيل","PHP 8.2 fin de vida: checklist de migración","PHP 8.2 llega al final de su ciclo de vida el 31 de diciembre de 2026. Inventaría tu stack, compara versiones y sigue una checklist detallada para migrar a PHP 8.3 o 8.4.",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,"Desarrollo","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-reconstruir-imagenes-php-wordpress",{"fr":220,"en":221,"ar":222,"es":218},"php2shell-docker-wordpress-reconstruire-images-php","php2shell-docker-rebuild-php-wordpress-images","php2shell-docker-إعادة-بناء-صور-php-ووردبريس","PHP2Shell y Docker: reconstruya sus imágenes de PHP y WordPress","Actualizar WordPress o Laravel no cambia el PHP de la imagen Docker. Demuestre la versión servida, vea qué etiquetas se movieron y reconstruya sin trampas.",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-sitios-web","wordpress",1793146114814]