Zend

Le framework Zend propose officiellement deux types de squelettes : Zend MVC et Zend Expressive.

Peu importe le squelette que vous utilisez, ce guide pourra vous donner quelques idées sur la façon de mettre en place le pare-feu Shieldon. Veuillez noter que je ne suis pas sûr de quelle méthode est considérée comme la meilleure pratique dans Zend, vous pouvez donc choisir la méthode qui vous convient le mieux.

Pare-feu dans Zend Framework

Installation

Utilisez PHP Composer :

composer require shieldon/shieldon

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

  • shieldon/psr-http Implémentation des 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 APIs ou services tiers, tels que Telegram, Line, RocketChat, Slack, SendGrid, MailGun, et plus encore.

Mise en place

Zend Expressive

Voici un exemple qui montre comment utiliser un middleware PSR-15 dans le squelette Zend Expressive.

1. Enregistrez un middleware.

Il existe une classe d'intégration prête à l'emploi pour Zend Expressive.

Dans votre fichier pipeline.php, ajoutez cette ligne :

Exemple :

$app->pipe(\Shieldon\Firewall\Integration\ZendPsr15::class);

2. Définissez un gestionnaire (Handler)

Accédez au répertoire App/src/Handler et créez un fichier PHP nommé FirewallPanelHandler.

Copiez le texte ci-dessous et collez-le dans ce fichier.

Exemple :

<?php

declare(strict_types=1);

namespace App\Handler;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Zend\Diactoros\Response;

/**
 * Gestionnaire du panneau de pare-feu
 * Si vous avez activé le CSRF, assurez-vous de transmettre le jeton CSRF au panneau de contrôle.
 */
class FirewallPanelHandler implements RequestHandlerInterface
{
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->entry();

        return new Response();
    }
}

3. Définissez une route pour le panneau de pare-feu

Dans votre fichier route.php, ajoutez cette ligne :

Exemple :


// Début - Pare-feu Shieldon

$app->route('/firewall/panel/', App\Handler\FirewallPanelHandler::class, ['GET', 'POST']);

foreach(\Shieldon\Firewall\Panel::getRoutes() as $route) {
    $app->route("/firewall/panel/$route/", App\Handler\FirewallPanelHandler::class, ['GET', 'POST']);
}

// Fin - Pare-feu Shieldon

C'est tout.

Zend MVC

Je ne suis pas sûr de la version du framework Zend que vous utilisez, je vais donc vous donner des instructions qui fonctionnent avec la plupart des versions de Zend.

1. Avant d'initialiser le cœur (core)

Dans votre fichier public/index.php, juste en dessous de cette ligne :

include __DIR__ . '/../vendor/autoload.php';

Ajoutez le code suivant :

/*
|--------------------------------------------------------------------------
| Exécution du pare-feu Shieldon
|--------------------------------------------------------------------------
|
| Le pare-feu Shieldon surveillera toutes les requêtes HTTP arrivant sur votre site web.
|
*/
if (isset($_SERVER['REQUEST_URI'])) {

    // Ce répertoire doit être accessible en écriture.
    $storage = dirname($_SERVER['SCRIPT_FILENAME']) . '/../shieldon_firewall';

    $firewall = new \Shieldon\Firewall\Firewall();
    $firewall->configure($storage);
    $firewall->controlPanel('/firewall/panel');
    $response = $firewall->run();

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

La prochaine étape consiste à créer un contrôleur pour le panneau de contrôle.

2. Définissez un contrôleur

Créez un contrôleur nommé FirewallController.

<?php

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;

class FirewallController extends AbstractActionController
{
    /**
     * Le point d'entrée du panneau de pare-feu.
     */
    public function panelAction()
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->entry();
    }
}

3. Définissez une route pour le panneau de pare-feu

Ouvrez le fichier module.config.php situé ici :

module/Application/config/module.config.php

(3-1) À l'intérieur du tableau ['router']['routes'], ajoutez le code suivant :

Exemple :

'firewallpanel' => [
    'type' => Segment::class,
    'options' => [
        'route'    => '/firewall/panel[:slug]',
        'constraints' => [
            'slug' => '[a-zA-Z0-9\/]*',
        ],
        'defaults' => [
            'controller' => Controller\FirewallController::class,
            'action'     => 'panel',
        ],
    ],
],

(3-2) À l'intérieur du tableau ['controllers']['factories'], ajoutez le code suivant :

Controller\FirewallController::class => InvokableFactory::class,

C'est tout.

Panneau de Contrôle

Vous pouvez accéder au panneau de contrôle du pare-feu en visitant /firewall/panel/. Pour voir la page, rendez-vous sur cette URL dans votre navigateur.

https://yourwebsite.com/firewall/panel

Le login par défaut est shieldon_user et le mot de passe est shieldon_pass. Après vous être connecté au panneau de contrôle du pare-feu, la première chose à faire est de modifier le login et le mot de passe.

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