Se sei interessato a costruire il tuo Web Application Firewall (WAF) utilizzando le API pubbliche della libreria Shieldon, puoi creare un sistema simile al Firewall Shieldon.
Ecco un esempio che mostra come Shieldon funziona, fornendo indicazioni per l'implementazione manuale di Shieldon nella tua applicazione web.
Di seguito è riportato un diagramma che illustra il ciclo di vita dell'istanza di Shieldon. Non è necessario comprenderlo completamente in questo momento, ma mentre personalizzi i tuoi componenti, moduli CAPTCHA e altro, ti servirà come utile riferimento.
$kernel = new \Shieldon\Firewall\Kernel();
In questo esempio, SQLite viene utilizzato come driver dei dati.
$dbLocation = APPPATH . 'cache/shieldon.sqlite3';
$pdoInstance = new \PDO('sqlite:' . $dbLocation);
$kernel->setDriver(
new \Shieldon\Firewall\Driver\SqliteDriver($pdoInstance)
);
I componenti di Shieldon sono insiemi di regole per consentire o negare in modo permanente le sessioni.
In questo esempio, viene caricato il componente TrustedBot per consentire i motori di ricerca popolari, impedendo ai loro bot di entrare nel processo di controllo - i componenti e i filtri successivi.
$kernel->setComponent(
new \Shieldon\Firewall\Component\TrustedBot()
);
Se stai utilizzando solo un'istanza del kernel Shieldon nella tua applicazione web, puoi ignorare questa impostazione. Il canale funge semplicemente da prefisso per i nomi delle tabelle dei dati.
$kernel->setChannel('web_project');
Questa impostazione consente solo 10 sessioni per visualizzare la pagina corrente. Il tempo di scadenza predefinito è di 300 secondi.
$kernel->limitSession(10, 300);
Puoi configurare un servizio CAPTCHA, ad esempio 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()) {
// Rimuovi il blocco dalla sessione corrente.
$kernel->unban();
}
$response = $kernel->respond();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
E questo è tutto.