Construction de votre propre WAF

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.

Diagramme du cycle de vie

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.

Diagramme du cycle de vie

Conseils

1. Initialiser l'instance Shieldon.

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

2. Configurer un pilote de données.

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)
);

3. Configurer les composants.

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()
);

4. Configurer un canal. (facultatif)

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');

5. Limiter le nombre de sessions en ligne. (facultatif)

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);

6. Charger les modules CAPTCHA.

Vous pouvez configurer un service CAPTCHA, par exemple, Google reCAPTCHA.

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

7. Commencer à protéger votre site Web

$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.