Par Valentin Brosseau / @c4software
/facture?id=8986Elle affiche votre facture. Parfait.
Que se passe-t-il si je remplace 8986 par 8987 ?
Si l'appli affiche la facture sans vérifier à qui elle appartient…
je lis les factures des autres, une par une.
C'est une faille IDOR (A01 du top OWASP).
$facture = Facture::find($id);
return view('facture', ['facture' => $facture]);La facture existe : on l'affiche. Mais est-elle à moi ?
Exister ≠ m'appartenir.
if ($facture->user_id !== Auth::id()) {
abort(403);
}On vérifie la propriété, pas seulement l'existence.
GET /facture?id=8987 404
GET /facture?id=8988 404
GET /facture?id=8989 404À votre avis, que fait cet utilisateur ?
Il teste tous les identifiants à la suite.
Les logs sont votre système d'alerte : encore faut-il les lire.
Route::get('/admin', 'AdminController@index');Rien ne protège cette route. Un simple utilisateur y accède.
Route::middleware(['admin'])->group(function () {
Route::get('/admin', 'AdminController@index');
});Un filtre exécuté avant le contrôleur, écrit une seule fois.
Ne jamais faire confiance à ce qui vient du client :
Le contrôle se fait côté serveur, à chaque accès.
Place au TP 🚀