Je veux pouvoir restreindre ou bloquer certaines adresses IP spécifiques pour accéder à notre application web. Voyons comment créer un middleware et bloquer des adresses IP en fonction des différentes routes de notre application.
Installer Laravel
Partons d’un installation propre en installant la dernière version de Laravel :
composer create-project laravel/laravel exemple cd exemple
Création d’un Middleware
Dans un terminal, utilisons la commande suivante pour créer un nouveau Middleware appelé BlockIpsMiddleware
:
php artisan make:middleware BlockIpsMiddleware
Notre fichier se trouve à l’emplacement app/Http/Middleware/BlockIpsMiddleware.php
et il contient le code minimum requis pour Laravel.
Nous allons maintenant ajouter une variable qui contiendra la liste des adresses IP autorisées.
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; class BlockIpsMiddleware { public $blockIps = ['192.168.0.42', '5.135.163.209', '127.0.0.1']; /** * Handle an incoming request. * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next): Response { // Check if the request IP is in the list of blocked IPs if (in_array($request->ip(), $this->blockIps)) { // If the IP is blocked, abort the request with a 403 error abort(403, "Désolé, vous n’êtes pas autorisé à accéder à cette page"); } // Otherwise, pass the request to the next middleware or closure in the pipeline return $next($request); } }
Enregistrer le Middleware
Pour enregistrer le Middleware, nous devons accéder au fichier Kernel.php
et chercher la variable $middlewareAliases
. Ajoutons la déclaration de notre Middleware BlockIpsMiddleware
à cet endroit. :
<?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { .... protected $middlewareAliases = [ .... 'blockIps' => \App\Http\Middleware\BlockIpsMiddleware::class, ]; }
Utiliser le Middleware
Pour utiliser le Middleware sur les routes appropriées, ouvrons notre fichier de routes routes/web.php
et ajoutons le Middleware aux routes concernées.
Route::middleware(['blockIps'])->group(function () { Route::resource('users', UserController::class); Route::resource('dashboard', DashboardController::class); }); Route::get('/profile', function () { return view('profile'); })->middleware(['blockIps']);
Tester
Il ne nous reste plus qu’à tester ce Middleware. Lors de la création de notre fichier nous avions ajouter l’adresse IP locale 127.0.0.1
. Lors de l’accès à la route users
; notre application devrait nous retourner une erreur 403.
Lançons notre application et notre navigateur sur notre route :
php artisan serve open http://localhost:8000/users