Symfony

Symfony es un conjunto de componentes PHP reutilizables y un framework PHP utilizado para construir aplicaciones web, APIs, microservicios y servicios web.

Esta guía ha sido probada exitosamente en la versión 4.3, pero también debería funcionar con versiones anteriores.

Symfony no tiene un concepto de middleware, por lo tanto, puedes crear un controlador padre para implementar Shieldon Firewall siguiendo los mismos pasos que en nuestra guía de CodeIgniter.

Si no deseas inicializar Shieldon Firewall en un controlador padre, puedes seguir los pasos del modo Bootstrap proporcionados a continuación.

Firewall en el framework Symfony

Instalación

Utiliza 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 extensivas.
  • 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

Bootstrap

1. Antes de inicializar el Kernel

En tu archivo config/bootstrap.php, después de esta línea:

require dirname(__DIR__).'/vendor/autoload.php';

Añade el siguiente código:

Ejemplo:

/*
|--------------------------------------------------------------------------
| Ejecutar el Firewall de Shieldon
|--------------------------------------------------------------------------
|
| El Firewall de Shieldon observará todas las solicitudes HTTP que lleguen a tu sitio web.
*/
if (isset($_SERVER['REQUEST_URI'])) {

    // Este directorio debe tener permisos de escritura.
    $storage = __DIR__ . '/../storage/shieldon';

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

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

    $response = $firewall->run();

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

2. Definir una ruta para el panel de control del firewall

Crea un controlador llamado FirewallPanelController ejecutando el siguiente comando.

Ejemplo:

php bin/console make:controller FirewallPanelController

Añade las siguientes líneas en la clase de controlador FirewallPanelController:

Ejemplo:

$panel = new \Shieldon\Firewall\Panel();
$panel->entry();

Si tienes CSRF habilitado, añade estas líneas:

Ejemplo:

$csrf = $this->container->get('security.csrf.token_manager');
$token = $csrf->refreshToken('key');

El ejemplo completo se verá así:

Ejemplo:

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class FirewallPanelController extends AbstractController
{
    /**
     * @Route("/firewall/panel/", name="firewall_panel")
     */
    public function panel()
    {
        $panel = new \Shieldon\Firewall\Panel();

        // Si tienes instalado `symfony/security-csrf`.
        $csrf = $this->container->get('security.csrf.token_manager');
        $token = $csrf->refreshToken('key')->getValue();

        $panel->csrf(['_token' => $token]);
        $panel->entry();
        exit;
    }

    /**
     * @Route("/firewall/panel/{class}/{method}", name="firewall_panel_page")
     */
    public function page()
    {
        $this->panel();
    }
}

Eso es todo.

Puedes acceder al panel de control del firewall a través de /firewall/panel, para ver la página, visita esta URL en tu navegador.

Panel de Control

https://tuweb.com/firewall/panel

El inicio de sesión por defecto 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 del Daemon, comenzará a monitorear tu sitio web. Asegúrate de haber configurado correctamente las opciones.