Questa guida completa fornisce una panoramica dettagliata per iniziare con il Firewall di Shieldon per la tua applicazione web. Vediamolo passo dopo passo.
Prima di utilizzare il Firewall di Shieldon, assicurati che il tuo server soddisfi i seguenti requisiti:
Shieldon può essere installato tramite Composer per PHP:
composer require shieldon/shieldon
Esistono tre principali modi per implementare Shieldon nella tua applicazione:
Ogni metodo di implementazione è accompagnato da esempi pratici utilizzando framework popolari come Slim 4, Laravel 6 e CodeIgniter 3.
Esempio: Framework Slim 4
Shieldon può essere utilizzato come un middleware PSR-15, come mostrato nell'esempio utilizzando il framework Slim 4.
class FirewallMiddleware
{
/**
* Classe invocabile del middleware di esempio
*
* @param ServerRequest $request Richiesta PSR-7
* @param RequestHandler $handler Gestore delle richieste PSR-15
*
* @return Response
*/
public function __invoke(Request $request, RequestHandler $handler): Response
{
$response = $handler->handle($request);
$firewall = new \Shieldon\Firewall\Firewall($request, $response);
// La directory in cui Shieldon Firewall posizionerà i suoi file.
$firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
return $response;
}
}
Ad esempio, se stai utilizzando il framework Slim 4, il codice dovrebbe apparire come segue:
$app->add(new FirewallMiddleware());
Ad esempio, se stai utilizzando il framework Slim 4, il codice dovrebbe apparire come segue. Successivamente, puoi accedere all'URL https://iltuosito.com/firewall/panel
per effettuare il login al pannello di controllo.
$app->any('/firewall/panel[/{params:.*}]', function (Request $request, Response $response, $args) {
$firewall = new \Shieldon\Firewall\Firewall($request, $response);
// La directory in cui Shieldon Firewall posizionerà i suoi file.
// Deve essere la stessa del firewallMiddleware.
$firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
$panel = new \Shieldon\Firewall\Panel();
// L'URL di base per il pannello di controllo.
$panel->entry('/firewall/panel/');
});
Nota:
POST
e GET
devono essere applicati al tuo sito web.POST
è necessario per risolvere i CAPTCHA da parte degli utenti temporaneamente bloccati.Esempio: Framework Laravel 6
Puoi inizializzare Shieldon nella fase di bootstrap della tua applicazione, come mostrato nell'esempio utilizzando il framework Laravel 6.
Nel tuo file bootstrap/app.php
, dopo <?php
, aggiungi il seguente codice.
/*
|--------------------------------------------------------------------------
| Esegui il Firewall di Shieldon
|--------------------------------------------------------------------------
|
| Il Firewall di Shieldon monitorerà tutte le richieste HTTP che arrivano al tuo sito web.
| Eseguire il Firewall di Shieldon prima di inizializzare Laravel evita possibili
| conflitti con le funzioni integrate di Laravel.
*/
if (isset($_SERVER['REQUEST_URI'])) {
// Questa directory deve essere scrivibile.
// La posizioniamo nella directory `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()]);
// Il punto di ingresso deve essere lo stesso della route definita.
$panel->entry('/firewall/panel/');
})->where('path', '(.*)');
Esempio: Framework CodeIgniter 3
Shieldon può anche essere implementato in un controller principale da cui gli altri controller ereditano, come mostrato nell'esempio utilizzando il framework CodeIgniter 3.
Crea un nuovo file MY_Controller.php
nella directory application/core/
. Questo sarà il tuo controller principale.
Ecco la struttura di base di MY_Controller
:
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
}
Successivamente, inizializza il Firewall di Shieldon nel costruttore di MY_Controller
. In questo modo, il Firewall di Shieldon verrà inizializzato per ogni controller che eredita da MY_Controller
.
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
// Autoload di Composer
require_once APPPATH . '../vendor/autoload.php';
// Questa directory deve essere scrivibile.
$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);
}
}
/**
* Protezione del Firewall di Shieldon.
*/
public function firewall()
{
$firewall = \Shieldon\Container::get('firewall');
$firewall->run();
}
}
Successivamente, devi definire un controller per il pannello di controllo del Firewall di Shieldon. In questo esempio, creerai un controller chiamato Firewall
.
Crea un nuovo file Firewall.php
nella directory application/controllers/
e aggiungi il seguente codice:
class Firewall extends MY_Controller
{
public function __construct()
{
parent::__construct();
}
/**
* Questo è il punto di ingresso per il nostro pannello di controllo del Firewall.
*/
public function panel()
{
$panel = new \Shieldon\Firewall\Panel();
$panel->entry('/firewall/panel/');
}
}
Ora, il Firewall di Shieldon viene inizializzato nel tuo MY_Controller
, e ogni controller che eredita da MY_Controller
ed esegue il metodo firewall
vi accederà. Inoltre, hai definito un controller Firewall con un metodo panel, che rappresenta il punto di ingresso al pannello di controllo del Firewall di Shieldon.
Infine, indipendentemente dal metodo di implementazione scelto, accedendo a https://iltuosito.com/firewall/panel/
verrà visualizzata la pagina di accesso.
Il nome utente e la password predefiniti sono shieldon_user
e shieldon_pass
, rispettivamente. Per motivi di sicurezza, si consiglia di modificare le credenziali di accesso dopo il primo accesso.