Esta guía le ayudará a implementar el Firewall de Shieldon en su aplicación Laravel. Los siguientes pasos han sido probados en Laravel 5 y 6.
Estos consejos no son la única forma de hacerlo, pero también le brindan algunas ideas.
Use PHP Composer:
composer require shieldon/shieldon
Esto también instalará las dependencias requeridas para Shieldon:
Puede utilizar Shieldon como un middleware o implementar Shieldon en la etapa de inicio de su aplicación web.
Inicialice Shieldon en la etapa de inicio de su aplicación, preferiblemente después de que se haya incluido el autoloader de Composer. De esta manera se evitan posibles conflictos con las funciones incorporadas de Laravel.
En su archivo bootstrap/app.php
, después de <?php
, agregue el siguiente código.
/*
|--------------------------------------------------------------------------
| Ejecutar el Firewall de Shieldon
|--------------------------------------------------------------------------
|
| El Firewall de Shieldon vigilará todas las solicitudes HTTP que lleguen a su sitio web.
| Ejecutar el Firewall de Shieldon antes de inicializar Laravel evitará posibles conflictos
| con las funciones incorporadas 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);
// 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);
}
}
Agregue la siguiente ruta a su archivo routes/web.php
:
Route::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
$panel->entry();
})->where('path', '(.*)');
Si adopta este método, el Firewall de Shieldon se ejecutará en el alcance global. Sin embargo, puede configurar una lista de exclusión para las URL que desea que el Firewall de Shieldon ignore.
Puede definir un middleware por sí mismo o utilizar la clase de integración proporcionada.
Si elige utilizar la clase de integración, omita el paso 1 y vaya al paso 2-2.
Ejecute el siguiente comando para crear un middleware llamado ShieldonFirewall
:
php artisan make:middleware ShieldonFirewall
A continuación, actualice el método handle
de la clase de middleware ShieldonFirewall
con el siguiente código:
<?php
namespace App\Http\Middleware;
use Closure;
class ShieldonFirewall
{
/**
* Manejar una solicitud entrante.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$firewall = new \Shieldon\Firewall\Firewall();
// El directorio en el que el Firewall de Shieldon colocará sus archivos.
$storage = storage_path('shieldon_firewall');;
$firewall->configure($storage);
// URL base para el panel de control.
$firewall->controlPanel('/firewall/panel/');
$firewall->getKernel()->setCaptcha(
new Csrf([
'name' => '_token',
'value' => csrf_token(),
])
);
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
return $next($request);
}
}
Actualice el archivo app/Http/Kernel.php
y agregue la siguiente línea a la propiedad $routeMiddleware
:
Para el paso 2-1:
'firewall' => \App\Http\Middleware\ShieldonFirewall::class,
Para el paso 2-2 (utilizando la clase de integración):
Si utiliza la clase de integración, el código se verá así:
'firewall' => \Shieldon\Firewall\Integration\Laravel::class,
Agregue la siguiente ruta a su archivo routes/web.php
:
Route::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
$panel->entry();
})->where('path', '(.*)');
El Firewall de Shieldon comenzará a vigilar su sitio web si se habilita en la sección de configuración del Daemon
. Asegúrese de haber configurado correctamente los ajustes.