Si vous êtes intéressé par la création de votre propre pare-feu d'application Web (WAF) en exploitant les API publiques de la bibliothèque Shieldon, vous pouvez créer un système similaire au pare-feu Shieldon.
Voici un exemple qui montre comment fonctionne Shieldon et qui fournit des instructions pour l'implémentation manuelle de Shieldon dans votre application Web.
Voici un diagramme illustrant le cycle de vie de l'instance Shieldon. Vous n'avez pas besoin de tout comprendre immédiatement, mais lorsque vous personnaliserez vos propres composants, modules CAPTCHA, et plus encore, il servira de référence utile.
$kernel = new \Shieldon\Firewall\Kernel();
Dans cet exemple, SQLite est utilisé comme pilote de données.
$dbLocation = APPPATH . 'cache/shieldon.sqlite3';
$pdoInstance = new \PDO('sqlite:' . $dbLocation);
$kernel->setDriver(
new \Shieldon\Firewall\Driver\SqliteDriver($pdoInstance)
);
Les composants Shieldon sont des ensembles de règles permettant d'autoriser ou de refuser de manière permanente les sessions.
Dans cet exemple, le composant TrustedBot est chargé pour permettre les moteurs de recherche populaires, empêchant ainsi leurs bots d'entrer dans le processus de vérification - les composants et filtres ultérieurs.
$kernel->setComponent(
new \Shieldon\Firewall\Component\TrustedBot()
);
Si vous n'utilisez qu'une seule instance de noyau Shieldon dans votre application Web, vous pouvez ignorer ce paramètre. Le canal sert simplement de préfixe pour les noms des tables de données.
$kernel->setChannel('web_project');
Ce paramètre permet uniquement à 10 sessions de consulter la page actuelle. Le délai d'expiration par défaut est de 300 secondes.
$kernel->limitSession(10, 300);
Vous pouvez configurer un service CAPTCHA, par exemple, 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()) {
// Débloquer la session actuelle.
$kernel->unban();
}
$response = $kernel->respond();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
Et c'est tout.