CodeIgniter

CodeIgniter es un framework MVC ligero. Primero discutiré sobre CodeIgniter 3, ya que su versión 4 tiene diferencias significativas con las versiones anteriores.

En esta guía, compartiré algunos consejos para implementar Shieldon Firewall en tu aplicación de CodeIgniter.

Firewall en el framework de CodeIgniter

Instalación

Utiliza PHP Composer:

composer require shieldon/shieldon

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

  • shieldon/psr-http Implementación PSR-7, 15, 17 con documentación completa y extensas pruebas.
  • shieldon/event-dispatcher El dispatcher 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

  • CodeIgniter 3
  • CodeIgniter 4

CodeIgniter 3

CodeIgniter 3 tiene un controlador central llamado CI_Controller que maneja su patrón arquitectónico MVC (Modelo-Vista-Controlador).

Recomiendo crear un controlador padre llamado MY_Controller en la carpeta core y agregar el código inicial en él.

1. MY_Controller

Creemos un archivo llamado MY_Controller.php en la carpeta core.

class MY_Controller extends CI_Controller
{
    /**
     * Constructor.
     */
    public function __construct()
    {
        parent::__construct();
    }
}

2. Inicializar la instancia de Firewall

Coloca el código inicial en el constructor para que cualquier controlador que extienda MY_Controller tenga Shieldon Firewall inicializado y el método $this->firewall() disponible.

class MY_Controller extends CI_Controller
{
    /**
     * Constructor.
     */
    public function __construct()
    {
        parent::__construct();

        // Autocargador de Composer
        require_once APPPATH . '../vendor/autoload.php';

        // Este directorio debe tener permisos de escritura.
        $storage = APPPATH . 'cache/shieldon_firewall';

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

    /**
     * Protección de Shieldon Firewall.
     */
    public function firewall()
    {
        $firewall = \Shieldon\Container::get('firewall');
        $firewall->run();
    }
}

Recordatorio

Para una seguridad óptima, tanto las carpetas del sistema como de la aplicación deben ubicarse por encima de la raíz web para que no sean accesibles directamente a través del navegador.

Si la carpeta de tu aplicación está al mismo nivel que el archivo index.php, por favor mueve el directorio $storage a una ubicación segura. Por ejemplo:

$storage =  APPPATH . '../shieldon';

3. Definir un controlador para el panel de control

Necesitamos un controlador para acceder al panel de control de Shieldon Firewall, en este ejemplo, vamos a definir un controlador llamado Firewall.

class Firewall extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Esta es la entrada de nuestro panel de Firewall.
     */
    public function panel()
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->entry();
    }
}

Ahora puedes acceder al panel de Firewall utilizando la siguiente URL:

https://yoursite.com/firewall/panel/

CodeIgniter 4

1. Registrar un filtro.

En tu archivo app/Config/Filters.php, agrega el siguiente código a la propiedad $aliases:

'firewall' => \Shieldon\Firewall\Intergration\CodeIgniter4::class,

A continuación, agrega la cadena firewall a la propiedad $globals, dentro del array before:

public $globals = [
    'before' => [
        'firewall'
    ],
];

2. Definir un controlador para el panel de Firewall

<?php 

namespace App\Controllers;

class Firewall extends BaseController
{
    public function panel()
    {
        $panel = new \Shieldon\Firewall\Panel();
        $panel->csrf([csrf_token() => csrf_hash()]);
        $panel->entry();
    }
}

¡Eso es todo!

Puedes acceder al panel de Firewall en /firewall/panel. Para ver la página, visita esta URL en tu navegador.

Panel de Control

https://yoursite.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 Firewall, lo primero que debes hacer es cambiar el inicio de sesión y la contraseña.

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