Construir tu propio WAF

Si estás interesado en construir tu propio Firewall de Aplicaciones Web (WAF) aprovechando las API públicas de la biblioteca Shieldon, puedes crear un sistema similar al Firewall Shieldon.

Aquí tienes un ejemplo que muestra cómo funciona Shieldon, proporcionando orientación para la implementación manual de Shieldon en tu aplicación web.

Diagrama del Ciclo de Vida

A continuación, se muestra un diagrama que ilustra el ciclo de vida de la instancia de Shieldon. No es necesario que comprendas todo en este momento, pero a medida que personalices tus propios componentes, módulos CAPTCHA y más, servirá como una referencia útil.

Diagrama del Ciclo de Vida

Consejos

1. Inicializar la instancia de Shieldon.

$kernel = new \Shieldon\Firewall\Kernel();

2. Configurar un controlador de datos.

En este ejemplo, se utiliza SQLite como controlador de datos.

$dbLocation = APPPATH . 'cache/shieldon.sqlite3';
$pdoInstance = new \PDO('sqlite:' . $dbLocation);

$kernel->setDriver(
    new \Shieldon\Firewall\Driver\SqliteDriver($pdoInstance)
);

3. Configurar los componentes.

Los componentes de Shieldon son conjuntos de reglas para permitir o denegar permanentemente las sesiones.

En este ejemplo, se carga el componente TrustedBot para permitir los motores de búsqueda populares, evitando que sus bots entren en el proceso de verificación, los componentes y filtros posteriores.

$kernel->setComponent(
    new \Shieldon\Firewall\Component\TrustedBot()
);

4. Configurar un canal. (opcional)

Si solo estás utilizando una instancia de kernel Shieldon en tu aplicación web, puedes ignorar esta configuración. El canal simplemente actúa como el prefijo para los nombres de las tablas de datos.

$kernel->setChannel('web_project');

5. Limitar el número de sesiones en línea. (opcional)

Esta configuración permite solo 10 sesiones para ver la página actual. El tiempo de expiración predeterminado es de 300 segundos.

$kernel->limitSession(10, 300);

6. Cargar los módulos CAPTCHA.

Puedes configurar un servicio CAPTCHA, por ejemplo, Google reCAPTCHA.

$kernel->setCaptcha(
    new \Shieldon\Firewall\Captcha\Recaptcha([
        'key' => '6LfkOaUUAAAAAH-AlTz3hRQ25SK8kZKb2hDRSwz9',
        'secret' => '6LfkOaUUAAAAAJddZ6k-1j4hZC1rOqYZ9gLm0WQh',
    ])
);

7. Comenzar a proteger tu sitio web

$result = $kernel->run();

if ($result !== $kernel::RESPONSE_ALLOW) {
    if ($kernel->captchaResponse()) {
        // Desbloquear la sesión actual.
        $kernel->unban();
    }

    $response = $kernel->respond();

    if ($response->getStatusCode() !== 200) {
        $httpResolver = new \Shieldon\Firewall\HttpResolver();
        $httpResolver($response);
    }
}

Y eso es todo.