Esta guía completa proporciona una descripción detallada de cómo comenzar con el Firewall de Shieldon para tu aplicación web. Desglosemos los pasos.
Antes de utilizar el Firewall de Shieldon, asegúrate de que tu servidor cumple con los siguientes requisitos:
Shieldon se puede instalar mediante PHP Composer:
composer require shieldon/shieldon
Existen tres formas principales de implementar Shieldon en tu aplicación:
Cada método de implementación se acompaña de ejemplos prácticos utilizando frameworks populares como Slim 4, Laravel 6 y CodeIgniter 3.
Ejemplo: Framework Slim 4
Shieldon se puede utilizar como un middleware PSR-15, como se muestra en el ejemplo utilizando el framework Slim 4.
class FirewallMiddleware
{
/**
* Clase invocable del middleware de ejemplo
*
* @param ServerRequest $request Solicitud PSR-7
* @param RequestHandler $handler Controlador de solicitud 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 donde 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;
}
}
Por ejemplo, si estás utilizando el framework Slim 4, el código debería verse así:
$app->add(new FirewallMiddleware());
Por ejemplo, si estás utilizando el framework Slim 4, el código debería verse así. Luego puedes acceder a la URL https://tusitio.com/firewall/panel
para iniciar sesión en el panel de control.
$app->any('/firewall/panel[/{params:.*}]', function (Request $request, Response $response, $args) {
$firewall = new \Shieldon\Firewall\Firewall($request, $response);
// El directorio donde el Firewall de Shieldon colocará sus archivos.
// Debe ser el mismo que el middleware del Firewall.
$firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
$panel = new \Shieldon\Firewall\Panel();
// La URL base para el panel de control.
$panel->entry('/firewall/panel/');
});
Nota:
POST
y GET
deben aplicarse a tu sitio web.POST
para resolver CAPTCHAs por parte de los usuarios que han sido bloqueados temporalmente.Ejemplo: Framework Laravel 6
Puedes inicializar Shieldon en la etapa de inicio de tu aplicación, como se muestra en el ejemplo utilizando el framework Laravel 6.
En tu archivo bootstrap/app.php
, después de <?php
, agrega el siguiente código.
/*
|--------------------------------------------------------------------------
| Ejecutar el Firewall de Shieldon
|--------------------------------------------------------------------------
|
| El Firewall de Shieldon vigilará todas las solicitudes HTTP que lleguen a tu sitio web.
| Ejecutar el Firewall de Shieldon antes de inicializar Laravel evitará posibles
| conflictos con las funciones integradas de Laravel.
*/
if (isset($_SERVER['REQUEST_URI'])) {
// Este directorio debe tener permisos de escritura.
// Lo colocamos en el directorio `storage/shieldon_firewall`.
$storage = __DIR__ . '/../storage/shieldon_firewall';
$firewall = new \Shieldon\Firewall\Firewall();
$firewall->configure($storage);
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
Route::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
// El punto de entrada debe ser el mismo que la ruta definida.
$panel->entry('/firewall/panel/');
})->where('path', '(.*)');
Ejemplo: Framework CodeIgniter 3
Shieldon también se puede implementar en un controlador principal que otros controladores heredan, como se muestra en el ejemplo utilizando el framework CodeIgniter 3.
Crea un nuevo archivo llamado MY_Controller.php
en el directorio application/core/
. Este será tu controlador principal.
Aquí está la estructura básica de MY_Controller
:
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
}
A continuación, inicializa el Firewall de Shieldon en el constructor de MY_Controller
. Esto asegurará que el Firewall de Shieldon se inicialice para cada controlador que hereda de MY_Controller
.
class MY_Controller extends CI_Controller
{
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);
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
/**
* Protección del Firewall de Shieldon.
*/
public function firewall()
{
$firewall = \Shieldon\Container::get('firewall');
$firewall->run();
}
}
A continuación, debes definir un controlador para el panel de control del Firewall de Shieldon. En este ejemplo, crearás un controlador llamado Firewall
.
Crea un nuevo archivo llamado Firewall.php
en el directorio application/controllers/
y agrega el siguiente código:
class Firewall extends MY_Controller
{
public function __construct()
{
parent::__construct();
}
/**
* Este es el punto de entrada de nuestro panel de control del Firewall.
*/
public function panel()
{
$panel = new \Shieldon\Firewall\Panel();
$panel->entry('/firewall/panel/');
}
}
Ahora, el Firewall de Shieldon se inicializa en tu MY_Controller
y cada controlador que herede de MY_Controller
y ejecute el método firewall
tendrá acceso a él. Además, has definido un controlador Firewall con un método panel, que es tu punto de entrada para el panel de control del Firewall de Shieldon.
Finalmente, independientemente del método de implementación elegido, al acceder a https://tusitio.com/firewall/panel/
se mostrará la página de inicio de sesión.
El nombre de usuario y la contraseña predeterminados son shieldon_user
y shieldon_pass
, respectivamente. Por motivos de seguridad, se recomienda cambiar las credenciales de inicio de sesión después del primer inicio de sesión.