Slim

Slim - один из моих любимых фреймворков. Поскольку Slim - это микрофреймворк, реализация защитного экрана Shieldon также будет легкой. Без лишних слов, приступим.

Защитный экран в Slim 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 и другие.

Реализация

Slim 4

(1) Создание промежуточного слоя защитного экрана.

Вы можете создать промежуточный слой самостоятельно или просто использовать класс интеграции.

Пример:

class FirewallMiddleware
{
    /**
     * Пример класса, реализующего промежуточный слой
     *
     * @param ServerRequest  $request  Запрос PSR-7
     * @param RequestHandler $handler  Обработчик запросов PSR-15
     *
     * @return Response
     */
    public function __invoke(Request $request, RequestHandler $handler): Response
    {
        $response = $handler->handle($request);

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

        // Каталог, в котором Shieldon Firewall будет размещать свои файлы.
        $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
        $response = $firewall->run();

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

        return $response;
    }
}

(2) Добавление промежуточного слоя защитного экрана в ваше приложение.

Например, если вы используете фреймворк Slim 4, код должен выглядеть так.

Пример:

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

Или, если вы предпочитаете использовать класс интеграции, вот код.

Пример:

$app->add(new \Shieldon\Firewall\Integration\Slim4);

(3) Создание маршрута для панели управления.

Например, если вы используете фреймворк Slim 4, код должен выглядеть так. Затем вы сможете получить доступ к URL https://вашсайт.com/firewall/panel/ для входа в панель управления.

Пример:

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

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

    // Каталог, в котором Shieldon Firewall будет размещать свои файлы.
    // Должно совпадать с firewallMiddleware.
    $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');

    // Базовый URL для панели управления.
    $firewall->controlPanel('/firewall/panel/');

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

    // Начало - Настройка полей CSRF, если вы включили Slim-CSRF

    $csrf = new \Slim\Csrf\Guard();
    $nameKey = $csrf->getTokenNameKey();
    $valueKey = $csrf->getTokenValueKey();

    $csrfName = $request->getAttribute('csrf_name');
    $csrfVale = $request->getAttribute('csrf_value');

    $panel->csrf(
        [$nameKey => $csrfName],
        [$valueKey => $csrfVale]
    );

    // Конец - Slim-CSRF

    $panel->entry();
});

Примечание:

  • Методы HTTP POST и GET должны быть применены к вашему веб-сайту.
  • Метод POST необходим для решения CAPTCHA пользователями, которые были временно заблокированы.

Вот и все.

Slim 3

(1) Добавление промежуточного слоя защитного экрана в ваше приложение.

У Shieldon уже есть готовый класс интеграции для этого промежуточного слоя, просто используйте его следующим образом.

Пример:

$app->add(new \Shieldon\Firewall\Integration\Slim3);

Например, если вы используете каркас Slim3, код в файле middleware.php будет выглядеть так:

Пример:

<?php

use Slim\App;

return function (App $app) {
    $app->add(new \Shieldon\Firewall\Integration\Slim3);
    $app->add(new \Slim\Csrf\Guard);
};

(2) Создание маршрута для панели управления.

Например, если вы используете фреймворк Slim 4, код должен выглядеть так. Затем вы сможете получить доступ к URL https://вашсайт.com/firewall/panel/ для входа в панель управления.

Пример:

$app->map(['GET', 'POST'], '/firewall/panel[/{params:.*}]', function (Request $request, Response $response, array $args) {

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

    // Каталог, в котором Shieldon Firewall будет размещать свои файлы.
    // Должно совпадать с firewallMiddleware.
    $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');

    // Базовый URL для панели управления.
    $firewall->controlPanel('/firewall/panel/');

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

    // Начало - Настройка полей CSRF, если вы включили Slim-CSRF

    $csrf = new \Slim\Csrf\Guard();
    $nameKey = $csrf->getTokenNameKey();
    $valueKey = $csrf->getTokenValueKey();

    $csrfName = $request->getAttribute('csrf_name');
    $csrfVale = $request->getAttribute('csrf_value');

    $panel->csrf(
        [$nameKey => $csrfName],
        [$valueKey => $csrfVale]
    );

    // Конец - Slim-CSRF

    $panel->entry();
});

Вот и все.

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

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

https://вашсайт.com/firewall/panel/

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

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