3. Middelware d'authentification⚓︎
Compétences
B3.5. Cybersécurisation d’une solution applicative et de son développement
- Prise en compte de la sécurité dans un projet de développement d’une solution applicative
Définition Middelware
Dans le contexte d'un framework PHP, un middleware est une composante logicielle qui agit comme une couche intermédiaire entre la requête entrante et la réponse sortante dans le processus de traitement d'une application web. Les middlewares sont couramment utilisés pour effectuer des tâches spécifiques telles que l'authentification, l'autorisation, la gestion des cookies, la mise en cache, la journalisation, la compression des réponses, et d'autres opérations liées au traitement de la requête.
Un middleware peut être conçu pour intervenir à différents moments du cycle de vie d'une requête HTTP. Dans de nombreux frameworks PHP, notamment Laravel et Symfony, les middlewares sont souvent utilisés dans le processus de gestion des requêtes HTTP.
3.1 l'authentification⚓︎
source du cours : laravel.sillo.org
Laravel a beaucoup évolué sur la prise en compte du middelware d'authentification. Pour la version Laravel 12 dans laquelle nous sommes aujourd'hui, le framework met à disposition des starters Kit, qui vont déployer models, vues et contrôleur liés aux différentes étapes de l'authentification. On va utiliser le package Laravel\breeze, pour le middelware d'authentification en choisissant le starter kit Blade. Celui ci est un kit de démonstration créé par LaravelDaily pour s'affranchir de la lourdeur des starters kits vue/React/LiveWrire.
Fonctionnalité du kit : fournit des fonctionnalités telles que l'authentification, la connexion, l'enregistrement, une page de tableau de bord et les paramètres de profil.
Point d'attention
- Vous veillerez à taguer une version stable de votre projet todo, avant de commencer la mise en place du middelware.
- Mettez de côté le fichier
web.phpetapp.js(Ils seront écrasé lors des installations)
▶️ Installer le paquetage laravel/breeze via composer :
composer require laravel/breeze --dev
Après cela, exécutez la commande suivante :
php artisan breeze:install
❗ Choisir Blade

😰 Si une erreur > Créer un fichier welcome.blade.php dans les vues
Puis compléter l'installation par :
npm install
npm run dev
▶️ Occupons nous de la partie base de données.
création du seeder Users
// Ajouter les namespaces nécessaires !
public function run()
{
// Exemple d'insertion d'un utilisateur
DB::table('users')->insert([
'name' => 'John Doe',
'email' => 'john.doe@example.com',
'email_verified_at' => now(),
'password' => Hash::make('mdp'), // Assurez-vous de hasher le mot de passe
'remember_token' => Str::random(10),
'created_at' => now(),
'updated_at' => now(),
]);
// Ajoutez d'autres utilisateurs au besoin
UserSeeder dans le DatabaseSeeder
$this->call([
UsersSeeder::class,
TodosSeeder::class,
CategoriesSeeder::class,
]);
php artisan migrate:fresh --seed
▶️ Il faut à présent activer le middelware d'authentication sur nos routes todo. Reprendre le web.php et ajouter les lignes dans le nouveau web.php qui contient en plus des liens vers la gestion de l'autentification.
// Groupe de routes avec middleware d'authentification
Route::get('/dashboard', function () {
return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');
Route::middleware('auth')->group(function () {
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});
// Activation du middleware d'authentification pour toutes les routes Todos. Création d'un groupe de routes.
Route::middleware('auth')->group(function () {
// Action correspondant au form de la vue (donc POST) et appel de la fonction saveTodo du controller
// Route concernant les todos
Route::get('/', [TodosController::class, 'liste'])->name('todo.liste');
[...]
});
Fixer l'erreur sur @Vite
rm -rf public/build // Supprimer le contenu du répertoire public/build
npm install
npm run dev
php artisan view:clear
L'installation de breeze/blade a également casser le fichier app.js. Remettre les lignes suivantes :
import 'bootstrap/dist/css/bootstrap.min.css';
import 'bootstrap-icons/font/bootstrap-icons.css';
import '@popperjs/core';
▶️ Observer dans l'arborescence ce que vous a apporté l'installation de Breeze (dans views, dans js/Pages/auth)

A faire
- Explorer le module d'authentification.
- Créer dans le menu l'accès au "Profil de l'utilisateur"
- Tester toutes les mires mises à votre disposition : changer un mot de passe, se souvenir ...
- Dans le menu, encadrer l'acces aux fonctionnalités soumises à authentification avec
@auth ... @endauth
3.2 Mot de passe oublié / mail sans SMTP⚓︎
Pour éviter un vrai envoi d’email, mais conserver la fonctionnalité d'envoi de mail.
▶️ On commence par créer un fichier de log dédié. Dans config\logging.php ajouter l'entrée suivante :
// canal dédié aux mails
'mail' => [
'driver' => 'single',
'path' => storage_path('logs/mails.log'),
'level' => 'debug',
],
.env
MAIL_MAILER=custom_log
MAIL_FROM_ADDRESS="noreply@exemple.local"
MAIL_FROM_NAME="Laravel Todo 2026"
config\mail.php, ajouter l'entrée suivante :
// mailer personnalisé pointant vers notre canal
'custom_log' => [
'transport' => 'log',
'channel' => 'mail', // nom du canal défini plus haut
],
tester 👀
- aller sur /forgot-password
- Saisir ton email utilisateur
- Ouvre storage/logs/mails.log
- Copier l'adresse de Reset du mot de passe : http://localhost:8000/reset-password/eyJhbGciOiJI...
- Copier-colle cette URL dans ton navigateur
- Saisir le nouveau mot de passe
- Se reconnecter avec le nouveau mot de passe
3.3 Questions de CyberSécurité⚓︎
Laravel est un framework très utilisé et donc sensible à une attaque Cyber. Il faut toujours rester en veille sur le framework et apporter les correctifs nécessaires dès que possible.
Ressources Documentaires :
- https://laravel.com/docs/12.x/authentication
- https://www.cybersecurity-help.cz/vdb/laravel/laravel_framework/12.0.0/
- https://www.cert.ssi.gouv.fr/avis/CERTFR-2025-AVI-0238/
3.3.1 Validation des entrées⚓︎
Toujours s’assurer que toutes les données saisies par l’utilisateur sont validées et assainies constitue la première ligne de défense contre de nombreuses attaques courantes, comme l’injection SQL ou le cross-site scripting (XSS). Laravel fournit de puissantes règles de validation que tu peux utiliser pour garantir l’intégrité des données.
$request->validate([
'username' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:8|confirmed',
]);
- Required → champ obligatoire
- string → doit être une chaîne de caractères
- max:255 → longueur maximale 255 caractères
- email → doit être une adresse e-mail valide
- unique:users,email → l’e-mail ne doit pas déjà exister dans la table users
- min:8 → minimum 8 caractères
- confirmed → doit correspondre au champ password_confirmation
Exemple déjà mis en place dans NewPasswordController.php :
public function store(Request $request): RedirectResponse
{
$request->validate([
'token' => ['required'],
'email' => ['required', 'email'],
'password' => ['required', 'confirmed', Rules\Password::defaults()],
]);
A faire
Ajouter une règle pour vérifier que le todo est une chaine obligatoire de caractères de moins de 256 car.
public function saveTodo(Request $request)
{
// Vérification des entrées du formulaire
$request->validate([
'texte' => 'required|string|max:256',
]);
....
}
3.3.2 Prevention contre SQL Injection⚓︎
L'utilisation de l'ORM Eloquent aide à prévenir les attaques par injection SQL. Utilisez toujours des requêtes paramétrées et évitez de concaténer l'entrée de l'utilisateur dans les instructions SQL.
// Safe query using Eloquent
$user = User::where('email', $email)->first();
3.3.3 Prévention des attaques XSS⚓︎
Pour éviter les attaques XSS, toujours échapper à l'entrée de l'utilisateur avant de la rendre dans la vue. Le moteur de modèle Blade de Laravel échappe automatiquement à la sortie des données en utilisant le {{ }} syntaxe.
<!-- Rendu sûr dans Blade -->
{{ $user->name }}
3.3.4 CSRF Protection⚓︎
Laravel inclut une protection intégrée de la CSRF. Assurez-vous que vos formulaires incluent le jeton CSRF en utilisant le @csrf Directive.
dans template.blade.php : <meta name="csrf-token" content="{{ csrf_token() }}">
et dans home.blade.php :
<form action="{{ route('todo.save') }}" method="POST" class="add">
@csrf
3.3.5 Limitation de débit et régulation des requêtes⚓︎
Pour protéger l'application contre les attaques par force brute, on peut mettre en place une limitation du nombre de requêtes grâce au middleware ThrottleRequests de Laravel.
Route:: middleware('throttle:10,1')-> groupe(fonction () {
Route :: post('/login', [LoginController::class, 'login']);
});
- throttle:10,1 signifie : → maximum 10 requêtes par minute (le second chiffre indique la durée en minutes).
- Si la limite est dépassée, Laravel renvoie automatiquement une réponse 429 (Too Many Requests).
3.3.6 Journalisation et supervision⚓︎
Mettre en place la journalisation et la supervision pour détecter et traiter rapidement les incidents de sécurité. Laravel intègre la journalisation, configurable dans config/logging.php.
Log::info('User logged in', ['user_id' => $user->id]);