Laravel

Dieser Leitfaden hilft Ihnen bei der Implementierung der Shieldon Firewall in Ihrer Laravel-Anwendung. Die folgenden Schritte wurden mit Laravel 5 und 6 getestet.

Diese Tipps sind nicht der einzige Weg, um es zu tun, bieten Ihnen jedoch einige Ideen.

Firewall in Laravel Framework

Installation

Verwenden Sie PHP Composer:

composer require shieldon/shieldon

Dadurch werden auch die für Shieldon erforderlichen Abhängigkeiten installiert:

  • shieldon/psr-http Die PSR-7, 15, 17 Implementierung mit vollständiger Dokumentation und umfangreichen Tests.
  • shieldon/event-dispatcher Der einfachste Ereignis-Dispatcher.
  • shieldon/web-security Eine Sammlung von Funktionen im Zusammenhang mit Web-Sicherheit.
  • shieldon/messenger Eine Sammlung von Modulen zum Senden von Nachrichten an Drittanbieter-APIs oder -Dienste wie Telegram, Line, RocketChat, Slack, SendGrid, MailGun und mehr.

Implementierung

Sie können Shieldon als Middleware verwenden oder Shieldon in der Bootstrap-Phase Ihrer Webanwendung implementieren.

Bootstrap-Phase

Initialisieren Sie Shieldon in der Bootstrap-Phase Ihrer Anwendung, direkt nachdem der Composer-Autoloader eingebunden wurde. Auf diese Weise wird eine mögliche Konflikte mit den integrierten Funktionen von Laravel vermieden.

(1) Vor der Initialisierung von $app

Fügen Sie in Ihrer bootstrap/app.php Datei nach <?php den folgenden Code hinzu.

/*
|--------------------------------------------------------------------------
| Shieldon Firewall ausführen
|--------------------------------------------------------------------------
|
| Die Shieldon Firewall überwacht alle HTTP-Anfragen, die an Ihre Website gesendet werden.
| Die Ausführung der Shieldon Firewall vor der Initialisierung von Laravel vermeidet mögliche Konflikte mit den integrierten Funktionen von Laravel.
*/
if (isset($_SERVER['REQUEST_URI'])) {

    // Dieses Verzeichnis muss beschreibbar sein.
    // Wir legen es im Verzeichnis `storage/shieldon_firewall` ab.
    $storage =  __DIR__ . '/../storage/shieldon_firewall';

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

    $firewall->configure($storage);

    // Die Basis-URL für das Kontrollpanel.
    $firewall->controlPanel('/firewall/panel/');

    $response = $firewall->run();

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

(2) Definieren Sie eine Route für das Firewall-Panel

Fügen Sie der Datei routes/web.php die folgende Route hinzu:

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

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

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

Wenn Sie diese Methode verwenden, wird die Shieldon Firewall im globalen Umfang ausgeführt. Sie können jedoch eine Ausschlussliste für die URLs festlegen, die von der Shieldon Firewall ignoriert werden sollen.

Middleware

Sie können eine Middleware selbst definieren oder die bereitgestellte Integration-Klasse verwenden.

Wenn Sie sich für die Verwendung der Integrationsklasse entscheiden, überspringen Sie Schritt 1 und gehen Sie zu Schritt 2-2.

1. Definieren Sie eine Middleware

Führen Sie den folgenden Befehl aus, um eine Middleware mit dem Namen ShieldonFirewall zu erstellen:

php artisan make:middleware ShieldonFirewall

Aktualisieren Sie dann die handle-Methode der Middleware-Klasse ShieldonFirewall mit folgendem Code:

<?php

namespace App\Http\Middleware;

use Closure;

class ShieldonFirewall
{
    /**
     * Behandeln einer eingehenden Anfrage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $firewall = new \Shieldon\Firewall\Firewall();

        // Das Verzeichnis, in dem Shieldon Firewall seine Dateien ablegt.
        $storage = storage_path('shieldon_firewall');;

        $firewall->configure($storage);

        // Basis-URL für das Kontrollpanel.
        $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. Registrieren Sie den Middleware-Alias

Aktualisieren Sie die Datei app/Http/Kernel.php und fügen Sie der $routeMiddleware-Eigenschaft folgende Zeile hinzu:

Für Schritt 2-1:

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

Für Schritt 2-2 (Verwendung der Integrationsklasse):

Wenn Sie die Integrationsklasse verwenden, sieht der Code folgendermaßen aus:

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

3. Definieren Sie eine Route für das Firewall-Panel

Fügen Sie der Datei routes/web.php die folgende Route hinzu:

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

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

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

Die Shieldon Firewall beginnt mit der Überwachung Ihrer Website, wenn sie in den Einstellungen für den Daemon aktiviert wird.

4. Weisen Sie der Route die firewall-Middleware zu

Weisen Sie der Route, die Sie schützen möchten, die firewall-Middleware zu. Zum Beispiel:

Route::any('/', function () {
    return view('welcome');

})->middleware('firewall');

Das ist alles.

Kontrollpanel

Sie können auf das Kontrollpanel zugreifen, indem Sie /firewall/panel/ in Ihrem Browser öffnen.

https://for.example.com/firewall/panel/

Der Standard-Login ist shieldon_user und das Passwort ist shieldon_pass. Nachdem Sie sich im Firewall-Panel angemeldet haben, sollten Sie als Erstes den Benutzernamen und das Passwort ändern.

Wenn die Shieldon Firewall in den Einstellungen für den Daemon aktiviert ist, überwacht sie Ihre Website. Stellen Sie sicher, dass Sie die Einstellungen korrekt konfiguriert haben.