Este post es un sencillo howto para ejecutar un código, antes de cualquier ejecución en PHP en una aplicación web. Sirve para montar lo que se llama un WAF en la capa de aplicación, cuyas siglas significan Web Application Firewall.
Así después, le podemos añadir toda la lógica que necesitemos. Con ésta técnica, en cada petición que se reciba en PHP, se ejecutará lo que pongas en el WAF antes de la ejecución de nuestra aplicación web.. ?
Al grano, el howto
A fecha de hoy, la forma más segura de hacer esto, es mediante la configuración del núcleo de PHP:
auto_prepend_file
Podemos editar la configuración del servidor, otra opción es poner en el directorio del proyecto los siguientes dos archivos:
- Uno que es el WAF en PHP que lo he nombrado a-waf.php.
- Y el otro fichero, configura qué PHP ejecutar.
El fichero de configuración, se debe nombrar como .user.ini y con un contenido como el siguiente:
auto_prepend_file = '/ruta/al/directorio/de/la/aplicacion/a-waf.php';
La lógica del WAF, el Web Aplication Firewall
El siguiente fichero a-waf.php es el que hará de primera barrera para nuestro WAF, con la lógica que queramos, un contenido podría ser:
<?php
header('HTTP/1.0 404 No encontrado');
die;
Este WAF simplemente devuelve 404 contínuamente. En el navegador se vería un resultado como el siguiente:
No tiene sentido bloquear cualquier petición, pero es el funcionamiento básico de un cortafuegos en una web, dejar pasar o no. Pero imaginemos que sabemos una IP que nos está dañando la web, un bot o algo así maligno, que nos está consumiendo recursos, o incluso colapsando la web porque se haya quedado enganchado. Si queremos bloquear su acceso a nuestra web, podríamos editar el fichero PHP y hacer así:
<?php
if($_SERVER['REMOTE_ADDR'] == 'aquí.la.ip.maligna') {
header('HTTP/1.0 404 No encontrado');
die;
}
Y así sucesivamente, podríamos empezar a desarrollar un cortafuegos, a base de revisar lo que llega en las peticiones..
¡Un saludo!