Seguridad PHP explicada · defensivo
Exposición de phpinfo(): por qué importa y cómo corregirla
phpinfo() muestra toda la configuración de PHP. Es útil al montar un servidor y un regalo para los atacantes si se queda en línea.
Última actualización
Qué es
Según el manual de PHP, phpinfo() muestra gran cantidad de información sobre el estado actual de PHP: opciones de compilación, extensiones, versión de PHP, información del servidor, entorno y cabeceras HTTP. En un sitio en producción eso puede incluir nombres de host de bases de datos, claves de API guardadas en variables de entorno y rutas internas. MITRE lo clasifica como CWE-200.
Cómo detectarlo
- Busque en la raíz web archivos que llamen a
phpinfo(y nombres comoinfo.php,phpinfo.phpytest.php. - Solicite esos nombres en sus propios sitios y compruebe si responden 200. No escanee sitios que no sean suyos.
- Compruebe si la cabecera
X-Powered-Bymuestra la versión de PHP; lo controlaexpose_php.
Cómo corregirlo
- Elimine los archivos phpinfo de producción. Si necesita la información, use
php -ien el servidor o una página temporal protegida por autenticación y bórrela después. - Añada
phpinfoadisable_functionsen php.ini si ninguna aplicación la necesita. - Ponga
expose_php = Offpara quitar la versión de las cabeceras de respuesta. - Rote cualquier secreto que apareciera en una página phpinfo expuesta, porque no puede saber quién lo vio.
Comprobaciones de solo lectura y patrones seguros
# 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 = phpinfo¿Mostrar la versión de PHP es realmente un problema?
Por sí solo no es una vulnerabilidad, pero indica a los atacantes si un servidor sigue por debajo de 8.2.35, 8.3.36, 8.4.27 u 8.5.12. Quitarla no cuesta nada.
El panel de mi hosting muestra phpinfo. ¿Está expuesto?
No si está detrás del inicio de sesión del panel. El riesgo es una página phpinfo accesible sin autenticación.
Otras clases de vulnerabilidades PHP
- Inyección de objetos PHP: qué es y cómo corregirlaLa inyección de objetos PHP ocurre cuando una entrada controlada por el usuario llega a unserialize(), que puede instanciar objetos cuyos métodos mágicos ejecutan la lógica que elige el atacante.
- Inclusión de archivos en PHP (LFI/RFI): qué es y cómo corregirlaLa inclusión de archivos ocurre cuando la entrada del usuario controla la ruta que recibe include o require, lo que permite leer archivos locales (LFI) o, con allow_url_include activado, ejecutar código remoto (RFI).
- SSRF en PHP: qué es y cómo corregirlaLa falsificación de peticiones del lado del servidor (SSRF) ocurre cuando una app PHP descarga una URL controlada por el usuario, lo que permite alcanzar servicios internos o endpoints de metadatos de la nube a través de su servidor.
- XSS en PHP: qué es y cómo prevenirloEl cross-site scripting (XSS) ocurre cuando una página PHP imprime en HTML datos controlados por el usuario sin escapar, de modo que el script de un atacante se ejecuta en el navegador de otros visitantes.
Fuentes
Los enlaces externos salen de este sitio. No alojamos código de explotación.
- 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