Zend

Das Zend-Framework bietet offiziell zwei Arten von Skeletten: Zend MVC und Zend Expressive.

Unabhängig vom verwendeten Skelett könnte Ihnen dieser Leitfaden einige Ideen geben, wie Sie das Shieldon-Firewall implementieren können. Bitte beachten Sie, dass ich nicht sicher bin, welche Methode in Zend als bewährte Vorgehensweise gilt, daher können Sie die von Ihnen bevorzugte Methode wählen.

Firewall im Zend Framework

Installation

Verwenden Sie PHP Composer:

composer require shieldon/shieldon

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

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

Implementierung

Zend Expressive

Hier ist ein Beispiel, das zeigt, wie Sie in Zend Expressive ein PSR-15-Middleware verwenden können.

1. Middleware registrieren.

Es gibt eine Integrationsklasse, die für Zend Expressive bereitsteht.

Fügen Sie in Ihrer pipeline.php diese Zeile hinzu:

Beispiel:

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

2. Handler definieren

Gehen Sie zum Verzeichnis App/src/Handler und erstellen Sie eine PHP-Datei namens FirewallPanelHandler.

Kopieren Sie den untenstehenden Text und fügen Sie ihn in diese Datei ein.

Beispiel:

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

/**
 * Firewall-Panel-Handler
 * Wenn CSRF aktiviert ist, stellen Sie sicher, dass das CSRF-Token an das Kontrollpanel übergeben wird.
 */
class FirewallPanelHandler implements RequestHandlerInterface
{
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->entry();

        return new Response();
    }
}

3. Route für das Firewall-Panel definieren

Fügen Sie in Ihrer route.php diese Zeile hinzu:

Beispiel:


// Beginn - Shieldon-Firewall

$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']);
}

// Ende - Shieldon-Firewall

Das ist alles.

Zend MVC

Ich bin mir nicht sicher, welche Version des Zend Frameworks Sie verwenden, daher werde ich Anweisungen geben, die mit den meisten Versionen von Zend funktionieren.

1. Vor der Initialisierung des Kerns

In Ihrer public/index.php unter dieser Zeile:

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

fügen Sie den folgenden Code hinzu:

/*
|--------------------------------------------------------------------------
| Shieldon-Firewall ausführen
|--------------------------------------------------------------------------
|
| Die Shieldon-Firewall überwacht alle HTTP-Anfragen an Ihre Website.
|
*/
if (isset($_SERVER['REQUEST_URI'])) {

    // Dieses Verzeichnis muss beschreibbar sein.
    $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);
    }
}

Der nächste Schritt besteht darin, einen Controller für das Kontrollpanel zu erstellen.

2. Controller definieren

Erstellen Sie einen Controller mit dem Namen FirewallController.

<?php

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;

class FirewallController extends AbstractActionController
{
    /**
     * Der Einstiegspunkt des Firewall-Panels.
     */
    public function panelAction()
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->entry();
    }
}

3. Route für das Firewall-Panel definieren

Öffnen Sie die Datei module.config.php, die sich hier befindet:

module/Application/config/module.config.php

(3-1) Fügen Sie innerhalb des Arrays ['router']['routes'] den folgenden Code hinzu:

Beispiel:

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

(3-2) Fügen Sie innerhalb des Arrays ['controllers']['factories'] den folgenden Code hinzu:

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

Das ist alles.

Kontrollpanel

Sie können auf das Firewall-Panel zugreifen, indem Sie /firewall/panel/ besuchen. Gehen Sie in Ihrem Browser zu dieser URL, um die Seite anzuzeigen.

https://yourwebsite.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 Login 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.