Slim

El framework Slim es uno de mis favoritos. Dado que Slim es un micro-framework, implementar el Firewall de Shieldon también es fácil. Sin más preámbulos, empecemos.

Firewall en Slim Framework

Instalación

Usa PHP Composer:

composer require shieldon/shieldon

Esto también instalará las dependencias requeridas para Shieldon:

  • shieldon/psr-http La implementación de PSR-7, 15, 17 con documentación completa y pruebas exhaustivas.
  • shieldon/event-dispatcher El despachador de eventos más sencillo.
  • shieldon/web-security Una colección de funciones relacionadas con la seguridad web.
  • shieldon/messenger Una colección de módulos para enviar mensajes a APIs o servicios de terceros, como Telegram, Line, RocketChat, Slack, SendGrid, MailGun y más.

Implementación

Slim 4

(1) Crea un Middleware para el Firewall.

Puedes crear un Middleware tú mismo o simplemente usar la clase de integración.

Ejemplo:

class FirewallMiddleware
{
    /**
     * Ejemplo de clase invocable para el Middleware
     *
     * @param ServerRequest  $request  Solicitud PSR-7
     * @param RequestHandler $handler  Manejador de solicitudes PSR-15
     *
     * @return Response
     */
    public function __invoke(Request $request, RequestHandler $handler): Response
    {
        $response = $handler->handle($request);

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

        // El directorio en el que el Firewall de Shieldon colocará sus archivos.
        $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
        $response = $firewall->run();

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

        return $response;
    }
}

(2) Agrega el Middleware del Firewall en tu Aplicación.

Por ejemplo, si estás usando el framework Slim 4, el código debería verse así.

Ejemplo:

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

O, si prefieres usar la clase de integración, aquí tienes el código.

Ejemplo:

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

(3) Crea una Ruta para el Panel de Control.

Por ejemplo, si estás usando el framework Slim 4, el código debería verse así. Luego podrás acceder a la URL https://tusitio.com/firewall/panel/ para iniciar sesión en el panel de control.

Ejemplo:

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

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

    // El directorio en el que el Firewall de Shieldon colocará sus archivos.
    // Debe ser el mismo que el del Middleware del Firewall.
    $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');

    // La URL base para el panel de control.
    $firewall->controlPanel('/firewall/panel/');

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

    // Comienzo - Configurar campos CSRF si has habilitado 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]
    );

    // Fin - Slim-CSRF

    $panel->entry();
});

Nota:

  • Los métodos HTTP POST y GET deben aplicarse a tu sitio web.
  • El método POST es necesario para resolver CAPTCHAs por parte de los usuarios que fueron bloqueados temporalmente.

Eso es todo.

Slim 3

(1) Agrega el Middleware del Firewall en tu Aplicación.

Shieldon tiene una clase de integración lista para este Middleware, simplemente úsala siguiendo los siguientes pasos.

Ejemplo:

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

Por ejemplo, si estás usando el esqueleto de Slim 3, el código en middleware.php se verá así:

Ejemplo:

<?php

use Slim\App;

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

(2) Crea una Ruta para el Panel de Control.

Por ejemplo, si estás usando el framework Slim 4, el código debería verse así. Luego podrás acceder a la URL https://tusitio.com/firewall/panel/ para iniciar sesión en el panel de control.

Ejemplo:

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

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

    // El directorio en el que el Firewall de Shieldon colocará sus archivos.
    // Debe ser el mismo que el del Middleware del Firewall.
    $firewall->configure(__DIR__ . '/../cache/shieldon_firewall');

    // La URL base para el panel de control.
    $firewall->controlPanel('/firewall/panel/');

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

    // Comienzo - Configurar campos CSRF si has habilitado 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]
    );

    // Fin - Slim-CSRF

    $panel->entry();
});

Eso es todo.

Panel de Control

Puedes acceder al Panel de Control del Firewall mediante /firewall/panel/, para ver la página, visita esta URL en tu navegador.

https://tusitio.com/firewall/panel/

El inicio de sesión predeterminado es shieldon_user y la contraseña es shieldon_pass. Después de iniciar sesión en el Panel de Control del Firewall, lo primero que debes hacer es cambiar el inicio de sesión y la contraseña.

Si el Firewall de Shieldon está habilitado en la sección de configuración Daemon, comenzará a monitorear tu sitio web. Asegúrate de haber configurado correctamente las opciones.