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.
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.
$kernel = new \Shieldon\Firewall\Kernel();
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)
);
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()
);
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');
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);
Puedes configurar un servicio CAPTCHA, por ejemplo, Google reCAPTCHA.
$kernel->setCaptcha(
new \Shieldon\Firewall\Captcha\Recaptcha([
'key' => '6LfkOaUUAAAAAH-AlTz3hRQ25SK8kZKb2hDRSwz9',
'secret' => '6LfkOaUUAAAAAJddZ6k-1j4hZC1rOqYZ9gLm0WQh',
])
);
$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.