Ce guide vous aidera à mettre en œuvre le pare-feu Shieldon dans votre application Laravel. Les étapes suivantes ont été testées sur Laravel 5 et 6.
Ces conseils ne sont pas la seule façon de le faire, mais ils vous donnent également quelques idées.
Utilisez PHP Composer :
composer require shieldon/shieldon
Cela installera également les dépendances requises pour Shieldon :
Vous pouvez utiliser Shieldon comme un middleware ou mettre en œuvre Shieldon à l'étape d'amorçage de votre application web.
Initialisez Shieldon à l'étape d'amorçage de votre application, de préférence après avoir inclus l'autoloader de Composer. De cette manière, vous évitez les éventuels conflits avec les fonctions intégrées de Laravel.
Dans votre fichier bootstrap/app.php
, après <?php
, ajoutez le code suivant.
/*
|--------------------------------------------------------------------------
| Exécuter le pare-feu Shieldon
|--------------------------------------------------------------------------
|
| Le pare-feu Shieldon surveillera toutes les requêtes HTTP arrivant sur votre site web.
| Exécuter le pare-feu Shieldon avant d'initialiser Laravel permet d'éviter les éventuels conflits
| avec les fonctions intégrées de Laravel.
*/
if (isset($_SERVER['REQUEST_URI'])) {
// Ce répertoire doit avoir des droits d'écriture.
// Nous le plaçons dans le répertoire `storage/shieldon_firewall`.
$storage = __DIR__ . '/../storage/shieldon_firewall';
$firewall = new \Shieldon\Firewall\Firewall();
$firewall->configure($storage);
// L'URL de base pour le panneau de contrôle.
$firewall->controlPanel('/firewall/panel/');
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
Ajoutez la route suivante à votre fichier routes/web.php
:
Route::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
$panel->entry();
})->where('path', '(.*)');
Si vous adoptez cette méthode, le pare-feu Shieldon s'exécutera dans la portée globale. Cependant, vous pouvez configurer une liste d'exclusion pour les URL que vous souhaitez que le pare-feu Shieldon ignore.
Vous pouvez définir votre propre middleware ou utiliser la classe d'intégration fournie.
Si vous choisissez d'utiliser la classe d'intégration, ignorez l'étape 1 et passez à l'étape 2-2.
Exécutez la commande suivante pour créer un middleware nommé ShieldonFirewall
:
php artisan make:middleware ShieldonFirewall
Ensuite, mettez à jour la méthode handle
de la classe middleware ShieldonFirewall
avec le code suivant :
<?php
namespace App\Http\Middleware;
use Closure;
class ShieldonFirewall
{
/**
* Gérer une requête entrante.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$firewall = new \Shieldon\Firewall\Firewall();
// Le répertoire où le pare-feu Shieldon placera ses fichiers.
$storage = storage_path('shieldon_firewall');;
$firewall->configure($storage);
// URL de base pour le panneau de contrôle.
$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);
}
}
Mettez à jour le fichier app/Http/Kernel.php
et ajoutez la ligne suivante à la propriété $routeMiddleware
:
Pour l'étape 2-1 :
'firewall' => \App\Http\Middleware\ShieldonFirewall::class,
Pour l'étape 2-2 (utilisation de la classe d'intégration) :
Si vous utilisez la classe d'intégration, le code sera :
'firewall' => \Shieldon\Firewall\Integration\Laravel::class,
Ajoutez la route suivante à votre fichier routes/web.php
:
Route::any('/firewall/panel/{path?}', function() {
$panel = new \Shieldon\Firewall\Panel();
$panel->csrf(['_token' => csrf_token()]);
$panel->entry();
})->where('path', '(.*)');
Le pare-feu Shieldon commencera à surveiller votre site web s'il est activé dans la section de configuration du Daemon
. Assurez-vous d'avoir correctement configuré les paramètres.