Fermer

Mettre en place une restriction d’accès par IP sur Laravel 10

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

1 réponse à “Mettre en place une restriction d’accès par IP sur Laravel 10

Laisser une réponse

Votre adresse email ne sera pas publiée. Les champs obligatoires sont indiqués par *