Qué es PHP y por qué generó tanta preocupación encontrar vulnerabilidades
En el artículo anterior hablamos de las lecciones para el código abierto que podíamos extraer de un grave problema de seguridad informática ocurrido la semana pasada. En este hablaremos sobre qué es PHP y por qué generó tanta preocupación que se encontraran vulnerabilidades.
La seguridad informática tiene dos grandes problemas. Es cara y, en muchos casos, es engorrosa. Lamentablemente, las consecuencias de no implementarla solo se ven cuando ya es tarde. Por eso es importatne entender las tecnologías que usamos.
Qué es PHP y por qué generó tanta preocupación encontrar vulnerabilidades
Para entender el problema, primero tenemos que entender qué es PHP y por qué es tan usado en proyectos de Internet.
PHP es un lenguaje de programación de código abierto del lado del servidor. Esto significa que se usa para crear aplicaciones que se ejecutan en una computadora remota y no en el dispositivo con el cual el cliente se conecta al sitio web. Su nombre sigue la afición de los programadores por los acrónimos recursivos, ya que significa (traducido a nuestro idioma) PHP es un Preprocesador de Hipertexto.
Creado en 1994, fue usado en los primeros tiempos de Facebook y actualmente lo utilizan el 75 % de los sitios web de Internet de los que es posible conseguir estadísticas, entre los que podemos mencionar a Wikipedia y a sistemas de gestión de contenidos (CMS) como WordPress (el que usa este blog), Joomla, osCommerce o Drupal. También lo utilizan plataformas de trabajo colaborativo como Slack y Nextcloud.
Características
- Trabaja del lado del servidor (Server-Side): El código PHP se ejecuta en el servidor. El usuario solo recibe el resultado, generalmente en formato HTML.
- Es un lenguaje interpretado: No necesita ser compilado a un lenguaje máquina antes de ejecutarse.
- Es multiplataforma: Funciona en casi cualquier sistema operativo (Linux, Windows, macOS) y es compatible con la mayoría de los servidores web, tanto de código abierto como privativos.
- Es multiparadigma: Aunque lleva más de 30 años entre nosotros, es compatible con los paradigmas de programación más modernos.
- Permite la conexión a bases de datos: Es ideal para conectarse con bases de datos relacionales de uso extendido como MySQL, PostgreSQL o MariaDB.
¿Qué hacen las aplicaciones del lado del servidor?
Las aplicaciones del lado del servidor se usan para realizar tareas críticas que, por razones de seguridad o capacidad de procesamiento, no pueden realizarse en el navegador. Entre ellas:
- Autenticación y seguridad: Comprueban si la contraseña ingresada por el usuario es correcta, abren y cierran las sesiones de los usuarios y protegen datos sensibles.
- Conexión con las bases de datos: Para evitar la manipulación de información sensible, la escritura, lectura, eliminación y actualización de bases de datos solo pueden realizarse del lado del servidor. PHP tiene bibliotecas ideales para hacerlo.
- Toma de decisiones en función de los datos ingresados por el usuario: Si, por ejemplo, la fecha de nacimiento del usuario determina que es menor de edad, no se le permite el acceso al sitio.
- Interacción con otros servicios: Mediante el uso de interfaces de programación de aplicaciones (API), puede conectarse con servicios externos que requieren una forma de validación. Por ejemplo, plataformas de pago como PayPal o Stripe.
- Generación de contenidos en tiempo real: Permite actualizar el contenido de las páginas al instante. Por ejemplo, cuando presione el botón de publicar para este artículo, la página principal lo colocará en primer lugar hasta que un compañero haga lo mismo con el suyo.
Cómo funciona la arquitectura cliente-servidor
La arquitectura cliente-servidor funciona con un grupo de herramientas conocidas por el acrónimo xAMPP. La X indica el sistema operativo, la A corresponde a Apache, el servidor más utilizado, aunque pueden usarse otros; la M indica la base de datos (MySQL o su fork MariaDB son los más usados), y la P corresponde a PHP.
Veamos cómo sería el proceso de compra en una típica tienda:
Paso 1: Conexión con el servidor
El usuario pone en su navegador (el cliente) la dirección web de la tienda. El navegador envía una petición HTTP solicitando el acceso a la página carrito.php.
Paso 2: El servidor recibe la petición
Cuando el servidor web recibe la petición, comprueba que corresponde a un archivo con extensión .php y la redirige al motor PHP.
Paso 3: El motor de PHP procesa la petición
El motor PHP lee el archivo línea por línea e ignora todo lo que no sea código PHP. Siguiendo las instrucciones del código, realiza tareas como:
- Conectarse a la base de datos para ver los productos que el cliente tiene en el carrito.
- Verificar si el usuario inició sesión, calcular el total de la compra, aplicar descuentos y sumar los gastos de envío.
- Generar la salida: tomar los datos de la base de datos y del procesamiento e incorporarlos a una plantilla HTML.
Paso 4: El servidor pasa el resultado al navegador
El servidor toma el código HTML y CSS generado por el motor PHP y se lo envía al navegador.
Paso 5: De nuevo al punto de partida
El navegador recibe el código HTML y lo renderiza. El usuario solo ve el carrito y el resultado del procesamiento.
Aunque el ejemplo corresponde a una tienda de aplicaciones, esta arquitectura es válida para cualquier tipo de servicio web que requiera interacción entre usuarios y un servidor externo.
¿Es PHP un lenguaje obsoleto?
En programación, como en tantas otras actividades, hay fanáticos y detractores. Aunque, como explicamos en el artículo anterior, todos los lenguajes de programación son susceptibles de tener vulnerabilidades, los enemigos de PHP se apresuraron a calificarlo de obsoleto. La realidad es que se trata de un lenguaje con ventajas y desventajas, pero sigue siendo muy útil.
Entre las ventajas:
- Fácil de aprender: Tiene una documentación gratuita y fácil de entender.
- Ideal para vibe coding: Al ser un lenguaje que lleva mucho tiempo entre nosotros, la mayoría de los modelos están entrenados en su uso.
- Costos: La mayoría de los alojamientos web de bajo costo incluyen soporte para PHP y bases de datos MySQL.
- Una gran comunidad de usuarios y desarrolladores: Como se demostró la semana pasada, las soluciones a las vulnerabilidades estuvieron disponibles enseguida. Y si encuentras un problema, seguramente alguien ya lo solucionó.
- Rendimiento: Las nuevas versiones mejoraron drásticamente su rendimiento y el manejo de la memoria.
Entre las desventajas:
- No sirve para crear aplicaciones nativas: Al requerir el uso de un servidor, consume demasiados recursos de un equipo de escritorio.
- No sirve para aplicaciones en tiempo real: Por más rápidas que sean las versiones, sigue necesitando un tiempo de procesamiento que lo hace poco útil para crear, por ejemplo, un cliente de mensajería automática.

