Zend

Il framework Zend offre ufficialmente due tipi di scheletri: Zend MVC e Zend Expressive.

Indipendentemente dallo scheletro che stai utilizzando, questa guida potrebbe darti alcune idee su come implementare il firewall Shieldon. Tieni presente che non sono sicuro quale sia considerato il metodo migliore in Zend, quindi puoi scegliere il metodo che preferisci.

Firewall nel framework Zend

Installazione

Utilizza PHP Composer:

composer require shieldon/shieldon

Questo installerà anche le dipendenze richieste per Shieldon:

  • shieldon/psr-http L'implementazione di PSR-7, 15, 17 con documentazione completa e test approfonditi.
  • shieldon/event-dispatcher Il dispatcher degli eventi più semplice.
  • shieldon/web-security Una collezione di funzioni legate alla sicurezza web.
  • shieldon/messenger Una collezione di moduli per l'invio di messaggi ad API o servizi di terze parti, come Telegram, Line, RocketChat, Slack, SendGrid, MailGun, e altro.

Implementazione

Zend Expressive

Questo è un esempio che mostra come utilizzare un middleware PSR-15 nello scheletro Zend Expressive.

1. Registrare un middleware.

Esiste una classe di integrazione pronta per Zend Expressive.

Nel tuo file pipeline.php, aggiungi questa riga:

Esempio:

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

2. Definire un gestore

Vai alla directory App/src/Handler e crea un file PHP chiamato FirewallPanelHandler.

Copia il seguente testo e incollalo in quel file.

Esempio:

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

/**
 * Gestore del Pannello del Firewall
 * Se hai CSRF abilitato, assicurati di passare il token CSRF al pannello di controllo.
 */
class FirewallPanelHandler implements RequestHandlerInterface
{
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->entry();

        return new Response();
    }
}

3. Definire una route per il Pannello del Firewall

Nel tuo file route.php, aggiungi questa riga:

Esempio:


// Inizio - Firewall 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']);
}

// Fine - Firewall Shieldon

E questo è tutto.

Zend MVC

Non sono sicuro della versione del framework Zend che stai utilizzando, quindi fornirò istruzioni che funzionano con la maggior parte delle versioni di Zend.

1. Prima di inizializzare il core

Nel tuo file public/index.php, sotto questa riga:

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

Aggiungi il seguente codice:

/*
|--------------------------------------------------------------------------
| Esegui il Firewall Shieldon
|--------------------------------------------------------------------------
|
| Il Firewall Shieldon monitorerà tutte le richieste HTTP che arrivano al tuo sito web.
|
*/
if (isset($_SERVER['REQUEST_URI'])) {

    // Questa directory deve avere i permessi di scrittura.
    $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);
    }
}

Il passo successivo è creare un controller per il pannello di controllo.

2. Definire un controller

Crea un controller chiamato FirewallController.

<?php

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;

class FirewallController extends AbstractActionController
{
    /**
     * Il punto di ingresso del Pannello del Firewall.
     */
    public function panelAction()
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->entry();
    }
}

3. Definire una route per il Pannello del Firewall

Apri il file module.config.php situato qui:

module/Application/config/module.config.php

(3-1) All'interno dell'array ['router']['routes'], aggiungi il seguente codice:

Esempio:

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

(3-2) All'interno dell'array ['controllers']['factories'], aggiungi il seguente codice:

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

E questo è tutto.

Pannello di Controllo

Puoi accedere al Pannello del Firewall visitando /firewall/panel/. Per visualizzare la pagina, vai su questo URL nel tuo browser.

https://yourwebsite.com/firewall/panel

Il login predefinito è shieldon_user, e la password è shieldon_pass. Dopo aver effettuato l'accesso al Pannello del Firewall, la prima cosa da fare è cambiare il login e la password.

Se il Firewall Shieldon è abilitato nella sezione delle impostazioni del Daemon, inizierà a monitorare il tuo sito web. Assicurati di aver configurato correttamente le impostazioni.