Erste Schritte

Dieser umfassende Leitfaden bietet einen detaillierten Überblick über den Einstieg in die Verwendung der Shieldon Firewall für Ihre Webanwendung. Lassen Sie uns beginnen.

Serveranforderungen

Stellen Sie vor der Verwendung der Shieldon Firewall sicher, dass Ihr Server die folgenden Anforderungen erfüllt:

  • PHP >= 7.1.0
  • Ctype PHP-Erweiterung
  • JSON PHP-Erweiterung
  • GD PHP-Erweiterung (Erforderlich zur Erzeugung von Captcha-Verifizierungscodes-Bildern.)
  • PDO PHP-Erweiterung (Erforderlich nur, wenn Sie den MySQL- oder SQLite-Treiber verwenden möchten.)
  • Redis PHP-Erweiterung (Erforderlich nur, wenn Sie den Redis-Treiber verwenden möchten.)

Installation

Die Shieldon Firewall kann über den PHP Composer installiert werden:

composer require shieldon/shieldon

Implementierung

Es gibt drei Hauptmethoden, um Shieldon in Ihrer Anwendung zu implementieren:

  • Implementieren Sie Shieldon als PSR-15-Middleware.
  • Implementieren Sie Shieldon in der Bootstrap-Phase Ihrer Anwendung.
  • Implementieren Sie Shieldon in einem übergeordneten Controller, von dem andere Controller erben.

Jede Implementierungsmethode wird von praktischen Beispielen unter Verwendung beliebter Frameworks wie Slim 4, Laravel 6 und CodeIgniter 3 begleitet.


PSR-15-Middleware

Beispiel: Slim 4 Framework

Shieldon kann als PSR-15-Middleware verwendet werden, wie im Beispiel mit dem Slim 4 Framework gezeigt.

(1) Erstellen Sie eine Firewall-Middleware.

class FirewallMiddleware
{
    /**
     * Beispiel Middleware aufrufbare Klasse
     *
     * @param ServerRequest  $request PSR-7-Anfrage
     * @param RequestHandler $handler PSR-15-Anfragehandler
     *
     * @return Response
     */
    public function __invoke(Request $request, RequestHandler $handler): Response
    {
        $response = $handler->handle($request);

        $firewall = new \Shieldon\Firewall\Firewall($request, $response);

        // Das Verzeichnis, in dem die Shieldon Firewall ihre Dateien ablegt.
        $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
        $response = $firewall->run();

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

        return $response;
    }
}

(2) Fügen Sie die Firewall-Middleware Ihrer Anwendung hinzu.

Wenn Sie beispielsweise das Slim 4 Framework verwenden, sollte der Code wie folgt aussehen.

$app->add(new FirewallMiddleware());

(3) Erstellen Sie eine Route für das Kontrollpanel.

Wenn Sie beispielsweise das Slim 4 Framework verwenden, sollte der Code wie folgt aussehen. Sie können dann über die URL https://yourwebsite.com/firewall/panel auf das Kontrollpanel zugreifen.

$app->any('/firewall/panel[/{params:.*}]', function (Request $request, Response $response, $args) {
    $firewall = new \Shieldon\Firewall\Firewall($request, $response);

    // Das Verzeichnis, in dem die Shieldon Firewall ihre Dateien ablegt.
    // Muss mit FirewallMiddleware übereinstimmen.
    $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');

    $panel = new \Shieldon\Firewall\Panel();

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

Hinweis:

  • Die HTTP-Methoden POST und GET sollten beide für Ihre Website gelten.
  • Die POST-Methode wird benötigt, um von vorübergehend blockierten Benutzern CAPTCHAs zu lösen.

Bootstrap-Phase

Beispiel: Laravel 6 Framework

Sie können Shieldon in der Bootstrap-Phase Ihrer Anwendung initialisieren, wie im Beispiel mit dem Laravel 6 Framework gezeigt.

(1) Vor dem Initialisieren 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.
| Durch das Ausführen der Shieldon Firewall vor der Initialisierung von Laravel wird eine mögliche
| Konflikte mit den integrierten Funktionen von Laravel vermieden.
*/
if (isset($_SERVER['REQUEST_URI'])) {

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

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

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

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

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

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

    // Der Einstiegspunkt muss mit der definierten Route übereinstimmen.
    $panel->entry('/firewall/panel/');

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

Übergeordneter Controller

Beispiel: CodeIgniter 3 Framework

Shieldon kann auch in einem übergeordneten Controller implementiert werden, von dem andere Controller erben, wie im Beispiel mit dem CodeIgniter 3 Framework gezeigt.

  1. Erstellen Sie einen übergeordneten Controller.

Erstellen Sie eine neue Datei mit dem Namen MY_Controller.php im application/core/-Verzeichnis. Dies wird Ihr übergeordneter Controller sein.

Hier ist die grundlegende Struktur für MY_Controller:

class MY_Controller extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
}
  1. Initialisieren Sie die Firewall-Instanz.

Initialisieren Sie als Nächstes die Shieldon Firewall im Konstruktor von MY_Controller. Dadurch wird sichergestellt, dass die Shieldon Firewall für jeden Controller initialisiert wird, der MY_Controller erweitert.

class MY_Controller extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();

        // Composer-Autoloader
        require_once APPPATH . '../vendor/autoload.php';

        // Dieses Verzeichnis muss beschreibbar sein.
        $storage = APPPATH . 'cache/shieldon_firewall';

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

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

    /**
     * Shieldon Firewall-Schutz.
     */
    public function firewall()
    {
        $firewall = \Shieldon\Container::get('firewall');
        $firewall->run();
    }
}
  1. Definieren Sie einen Controller für das Kontrollpanel.

Definieren Sie als Nächstes einen Controller für das Shieldon Firewall-Kontrollpanel. In diesem Beispiel erstellen Sie einen Controller namens Firewall.

Erstellen Sie eine neue Datei Firewall.php im application/controllers/-Verzeichnis und fügen Sie den folgenden Code hinzu:

class Firewall extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Dies ist der Einstiegspunkt für unser Firewall-Kontrollpanel.
     */
    public function panel()
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->entry('/firewall/panel/');
    }
}

Jetzt wird die Shieldon Firewall in Ihrem MY_Controller initialisiert und jeder Controller, der MY_Controller erweitert und die Methode firewall ausführt, hat darauf Zugriff. Darüber hinaus haben Sie einen Firewall-Controller definiert, der eine Methode panel enthält, die Ihr Einstiegspunkt zum Shieldon Firewall-Kontrollpanel ist.

Anmeldung

Unabhängig von der gewählten Implementierungsmethode wird beim Zugriff auf https://yoursite.com/firewall/panel/ die Anmeldeseite angezeigt.

Der Standard-Benutzername und das Standard-Passwort lauten shieldon_user bzw. shieldon_pass. Aus Sicherheitsgründen wird empfohlen, nach dem ersten Login die Anmeldeinformationen zu ändern.