Laravel

Ce guide vous aidera à mettre en œuvre le pare-feu Shieldon dans votre application Laravel. Les étapes suivantes ont été testées sur Laravel 5 et 6.

Ces conseils ne sont pas la seule façon de le faire, mais ils vous donnent également quelques idées.

Pare-feu dans le framework Laravel

Installation

Utilisez PHP Composer :

composer require shieldon/shieldon

Cela installera également les dépendances requises pour Shieldon :

  • shieldon/psr-http L'implémentation PSR-7, 15, 17 avec une documentation complète et des tests approfondis.
  • shieldon/event-dispatcher Le dispatcher d'événements le plus simple.
  • shieldon/web-security Une collection de fonctions liées à la sécurité web.
  • shieldon/messenger Une collection de modules pour l'envoi de messages à des API ou des services tiers, tels que Telegram, Line, RocketChat, Slack, SendGrid, MailGun, et plus encore.

Mise en œuvre

Vous pouvez utiliser Shieldon comme un middleware ou mettre en œuvre Shieldon à l'étape d'amorçage de votre application web.

Étape d'amorçage

Initialisez Shieldon à l'étape d'amorçage de votre application, de préférence après avoir inclus l'autoloader de Composer. De cette manière, vous évitez les éventuels conflits avec les fonctions intégrées de Laravel.

(1) Avant l'initialisation de $app

Dans votre fichier bootstrap/app.php, après <?php, ajoutez le code suivant.

/*
|--------------------------------------------------------------------------
| Exécuter le pare-feu Shieldon
|--------------------------------------------------------------------------
|
| Le pare-feu Shieldon surveillera toutes les requêtes HTTP arrivant sur votre site web.
| Exécuter le pare-feu Shieldon avant d'initialiser Laravel permet d'éviter les éventuels conflits
| avec les fonctions intégrées de Laravel.
*/
if (isset($_SERVER['REQUEST_URI'])) {

    // Ce répertoire doit avoir des droits d'écriture.
    // Nous le plaçons dans le répertoire `storage/shieldon_firewall`.
    $storage =  __DIR__ . '/../storage/shieldon_firewall';

    $firewall = new \Shieldon\Firewall\Firewall();

    $firewall->configure($storage);

    // L'URL de base pour le panneau de contrôle.
    $firewall->controlPanel('/firewall/panel/');

    $response = $firewall->run();

    if ($response->getStatusCode() !== 200) {
        $httpResolver = new \Shieldon\Firewall\HttpResolver();
        $httpResolver($response);
    }
}

(2) Définir une route pour le panneau de contrôle du pare-feu

Ajoutez la route suivante à votre fichier routes/web.php :

Route::any('/firewall/panel/{path?}', function() {

    $panel = new \Shieldon\Firewall\Panel();
    $panel->csrf(['_token' => csrf_token()]);
    $panel->entry();

})->where('path', '(.*)');

Si vous adoptez cette méthode, le pare-feu Shieldon s'exécutera dans la portée globale. Cependant, vous pouvez configurer une liste d'exclusion pour les URL que vous souhaitez que le pare-feu Shieldon ignore.

Middleware

Vous pouvez définir votre propre middleware ou utiliser la classe d'intégration fournie.

Si vous choisissez d'utiliser la classe d'intégration, ignorez l'étape 1 et passez à l'étape 2-2.

1. Définir un middleware

Exécutez la commande suivante pour créer un middleware nommé ShieldonFirewall :

php artisan make:middleware ShieldonFirewall

Ensuite, mettez à jour la méthode handle de la classe middleware ShieldonFirewall avec le code suivant :

<?php

namespace App\Http\Middleware;

use Closure;

class ShieldonFirewall
{
    /**
     * Gérer une requête entrante.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $firewall = new \Shieldon\Firewall\Firewall();

        // Le répertoire où le pare-feu Shieldon placera ses fichiers.
        $storage = storage_path('shieldon_firewall');;

        $firewall->configure($storage);

        // URL de base pour le panneau de contrôle.
        $firewall->controlPanel('/firewall/panel/');

        $firewall->getKernel()->setCaptcha(
            new Csrf([
                'name' => '_token',
                'value' => csrf_token(),
            ])
        );

        $response = $firewall->run();

        if ($response->getStatusCode() !== 200) {
            $httpResolver = new \Shieldon\Firewall\HttpResolver();
            $httpResolver($response);
        }

        return $next($request);
    }
}

2. Enregistrer l'alias du middleware

Mettez à jour le fichier app/Http/Kernel.php et ajoutez la ligne suivante à la propriété $routeMiddleware :

Pour l'étape 2-1 :

'firewall' => \App\Http\Middleware\ShieldonFirewall::class,

Pour l'étape 2-2 (utilisation de la classe d'intégration) :

Si vous utilisez la classe d'intégration, le code sera :

'firewall' => \Shieldon\Firewall\Integration\Laravel::class,

3. Définir une route pour le panneau de contrôle du pare-feu

Ajoutez la route suivante à votre fichier routes/web.php :

Route::any('/firewall/panel/{path?}', function() {

    $panel = new \Shieldon\Firewall\Panel();
    $panel->csrf(['_token' => csrf_token()]);
    $panel->entry();

})->where('path', '(.*)');

Le pare-feu Shieldon commencera à surveiller votre site web s'il est activé dans la section de configuration du Daemon. Assurez-vous d'avoir correctement configuré les paramètres.