Se você está interessado em construir seu próprio Firewall de Aplicações Web (WAF) usando as APIs públicas da biblioteca Shieldon, você pode criar um sistema semelhante ao Firewall Shieldon.
Aqui está um exemplo que mostra como o Shieldon funciona, fornecendo orientações para a implementação manual do Shieldon em seu aplicativo web.
Abaixo está um diagrama ilustrando o ciclo de vida da instância do Shieldon. Você não precisa compreender tudo agora, mas ao personalizar seus próprios componentes, módulos CAPTCHA e mais, ele servirá como uma referência útil.
$kernel = new \Shieldon\Firewall\Kernel();
Neste exemplo, o SQLite é usado como o driver de dados.
$dbLocation = APPPATH . 'cache/shieldon.sqlite3';
$pdoInstance = new \PDO('sqlite:' . $dbLocation);
$kernel->setDriver(
new \Shieldon\Firewall\Driver\SqliteDriver($pdoInstance)
);
Os componentes do Shieldon são conjuntos de regras para permitir ou negar permanentemente as sessões.
Neste exemplo, o componente TrustedBot é carregado para permitir os motores de busca populares, impedindo assim que seus bots entrem no processo de verificação - componentes e filtros subsequentes.
$kernel->setComponent(
new \Shieldon\Firewall\Component\TrustedBot()
);
Se você estiver usando apenas uma instância do kernel Shieldon em seu aplicativo web, você pode ignorar essa configuração. O canal simplesmente age como o prefixo para os nomes das tabelas de dados.
$kernel->setChannel('web_project');
Essa configuração permite apenas 10 sessões para visualizar a página atual. O tempo de expiração padrão é de 300 segundos.
$kernel->limitSession(10, 300);
Você pode configurar um serviço CAPTCHA, como o 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()) {
// Desbloqueie a sessão atual.
$kernel->unban();
}
$response = $kernel->respond();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
E é isso.