Zend

Zend Framework официально предоставляет два типа скелетов: Zend MVC и Zend Expressive.

Независимо от того, какой скелет вы используете, этот руководство может дать вам некоторые идеи о том, как реализовать Firewall Shieldon. Обратите внимание, что я не уверен, какой способ считается наиболее правильным в Zend, поэтому вы можете выбрать метод, который вам нравится.

Firewall в Zend Framework

Установка

Используйте PHP Composer:

composer require shieldon/shieldon

Это также установит необходимые зависимости для Shieldon:

  • shieldon/psr-http Реализация PSR-7, 15, 17 с полной документацией и обширным тестированием.
  • shieldon/event-dispatcher Самый простой диспетчер событий.
  • shieldon/web-security Коллекция функций, связанных с веб-безопасностью.
  • shieldon/messenger Коллекция модулей для отправки сообщений в сторонние API или сервисы, такие как Telegram, Line, RocketChat, Slack, SendGrid, MailGun и другие.

Реализация

Zend Expressive

Это пример, который показывает, как использовать PSR-15 Middleware в скелете Zend Expressive.

1. Зарегистрировать Middleware.

Есть готовый интеграционный класс для Zend Expressive.

В вашем pipeline.php добавьте эту строку:

Пример:

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

2. Определить обработчик

Перейдите в каталог App/src/Handler и создайте файл PHP с именем FirewallPanelHandler.

Скопируйте следующий текст и вставьте его в этот файл.

Пример:

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

/**
 * Обработчик панели брандмауэра
 * Если у вас включена защита от CSRF, убедитесь, что передаете токен CSRF в панель управления.
 */
class FirewallPanelHandler implements RequestHandlerInterface
{
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->entry();

        return new Response();
    }
}

3. Определить маршрут для панели брандмауэра

В вашем route.php добавьте эту строку:

Пример:


// Начало - 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']);
}

// Конец - Firewall Shieldon

Это все.

Zend MVC

Я не уверен, какую версию Zend Framework вы используете, поэтому я предоставлю инструкции, которые работают с большинством версий Zend.

1. Перед Инициализацией Ядра

В вашем public/index.php после этой строки:

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

Добавьте следующий код:

/*
|--------------------------------------------------------------------------
| Запустить Firewall Shieldon
|--------------------------------------------------------------------------
|
| Firewall Shieldon будет наблюдать за всеми HTTP-запросами, поступающими на ваш сайт.
|
*/
if (isset($_SERVER['REQUEST_URI'])) {

    // Этот каталог должен иметь права на запись.
    $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);
    }
}

Следующим шагом является создание контроллера для панели управления.

2. Определить Контроллер

Создайте контроллер с названием FirewallController.

<?php

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;

class FirewallController extends AbstractActionController
{
    /**
     * Точка входа в панель брандмауэра.
     */
    public function panelAction()
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->entry();
    }
}

3. Определить маршрут для панели брандмауэра

Откройте файл module.config.php, расположенный по адресу:

module/Application/config/module.config.php

(3-1) Внутри массива ['router']['routes'] добавьте следующий код:

Пример:

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

(3-2) Внутри массива ['controllers']['factories'] добавьте следующий код:

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

Это все.

Панель управления

Вы можете получить доступ к панели брандмауэра, посетив /firewall/panel/. Чтобы увидеть страницу, перейдите по этому URL в своем браузере.

https://yourwebsite.com/firewall/panel

Логин по умолчанию - shieldon_user, пароль - shieldon_pass. После входа в панель брандмауэра, первое, что вам следует сделать, - это изменить логин и пароль.

Если Firewall Shieldon включен в разделе настроек Daemon, он начнет отслеживать ваш сайт. Убедитесь, что вы правильно настроили настройки.