Laravel

Questa guida ti aiuterà a implementare il firewall Shieldon nella tua applicazione Laravel. I seguenti passaggi sono stati testati su Laravel 5 e 6.

Questi consigli non sono l'unico modo per farlo, ma ti offrono anche alcune idee.

Firewall nel framework Laravel

Installazione

Utilizza PHP Composer:

composer require shieldon/shieldon

Questo installerà anche le dipendenze necessarie per Shieldon:

  • shieldon/psr-http L'implementazione PSR-7, 15, 17 con documentazione completa e test approfonditi.
  • shieldon/event-dispatcher Il dispatcher di 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

Puoi utilizzare Shieldon come middleware o implementare Shieldon nella fase di bootstrap della tua applicazione web.

Fase di Bootstrap

Inizializza Shieldon nella fase di bootstrap della tua applicazione, preferibilmente subito dopo aver incluso l'autoloader di Composer. In questo modo si evitano possibili conflitti con le funzioni incorporate di Laravel.

(1) Prima dell'inizializzazione di $app

Nel tuo file bootstrap/app.php, dopo <?php, aggiungi il seguente codice.

/*
|--------------------------------------------------------------------------
| Esegui il firewall Shieldon
|--------------------------------------------------------------------------
|
| Il firewall Shieldon monitorerà tutte le richieste HTTP che arrivano al tuo sito web.
| Eseguire il firewall Shieldon prima di inizializzare Laravel evita possibili conflitti
| con le funzioni incorporate di Laravel.
*/
if (isset($_SERVER['REQUEST_URI'])) {

    // Questa directory deve avere i permessi di scrittura.
    // La mettiamo nella directory `storage/shieldon_firewall`.
    $storage =  __DIR__ . '/../storage/shieldon_firewall';

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

    $firewall->configure($storage);

    // L'URL di base per il pannello di controllo.
    $firewall->controlPanel('/firewall/panel/');

    $response = $firewall->run();

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

(2) Definisci una Route per il pannello di controllo del firewall

Aggiungi la seguente route al tuo file routes/web.php:

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

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

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

Se adotti questo metodo, il firewall Shieldon verrà eseguito nell'ambito globale. Tuttavia, puoi configurare una lista di esclusioni per gli URL che desideri che il firewall Shieldon ignorino.

Middleware

Puoi definire un middleware personalizzato o utilizzare la classe di integrazione fornita.

Se scegli di utilizzare la classe di integrazione, salta il passaggio 1 e vai al passaggio 2-2.

1. Definisci un Middleware

Esegui il seguente comando per creare un middleware chiamato ShieldonFirewall:

php artisan make:middleware ShieldonFirewall

Successivamente, aggiorna il metodo handle della classe middleware ShieldonFirewall con il seguente codice:

<?php

namespace App\Http\Middleware;

use Closure;

class ShieldonFirewall
{
    /**
     * Gestisci una richiesta in arrivo.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $firewall = new \Shieldon\Firewall\Firewall();

        // La directory in cui il firewall Shieldon collocherà i suoi file.
        $storage = storage_path('shieldon_firewall');;

        $firewall->configure($storage);

        // URL di base per il pannello di controllo.
        $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. Registra l'Alias del Middleware

Aggiorna il file app/Http/Kernel.php e aggiungi la seguente riga alla proprietà $routeMiddleware:

Per il passaggio 2-1:

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

Per il passaggio 2-2 (utilizzo della classe di integrazione):

Se utilizzi la classe di integrazione, il codice sarà così:

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

3. Definisci una Route per il pannello di controllo del firewall

Aggiungi la seguente route al tuo file routes/web.php:

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

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

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

Il firewall Shieldon inizierà a monitorare il tuo sito web se abilitato nella sezione delle impostazioni del Daemon. Assicurati di aver configurato correttamente le impostazioni.