Laravel est l'un des frameworks PHP les plus sûrs : protection CSRF, requêtes préparées, échappement automatique dans Blade, chiffrement des cookies. Pourtant, la plupart des failles que je rencontre en audit viennent du code applicatif. Voici dix réflexes simples qui font la différence.
1. Valider toutes les entrées côté serveur
Une validation en JavaScript améliore l'expérience, mais elle ne protège rien. Chaque donnée qui arrive au serveur doit passer par une règle de validation, idéalement dans une Form Request.
public function rules(): array
{
return [
'email' => ['required', 'email:rfc', 'max:190'],
'website' => ['nullable', 'url:https'],
];
}
2. Ne jamais faire confiance à l'assignation de masse
Déclarez explicitement $fillable et gardez hors de portée les champs sensibles comme role ou is_admin. Un champ ajouté au formulaire par un attaquant ne doit rien pouvoir modifier.
3. Autoriser chaque action, pas seulement chaque page
Masquer un bouton dans la vue ne sécurise rien. Utilisez les Policies et appelez authorize() dans chaque contrôleur ou composant Livewire, y compris pour les actions groupées.
4. Limiter les tentatives
Connexion, mot de passe oublié, formulaire de contact : tout ce qui peut être automatisé doit être limité avec RateLimiter.
5. Échapper par défaut
Dans Blade, utilisez {{ }}. Réservez {!! !!} aux contenus que vous avez vous-même nettoyés.
6. Vérifier le vrai type des fichiers téléversés
Les règles image et mimes analysent le contenu réel du fichier, pas seulement son extension. Stockez les fichiers hors du dossier public lorsqu'ils sont privés.
7. Garder les secrets hors du code
Les clés d'API vont dans .env, jamais dans Git. Et en production : APP_DEBUG=false, sans exception.
8. Forcer HTTPS et des cookies sécurisés
Activez SESSION_SECURE_COOKIE et configurez correctement les proxies de confiance derrière un CDN.
9. Journaliser les actions sensibles
Connexions, suppressions, changements de rôle : un journal d'activité permet de comprendre ce qui s'est passé en cas d'incident.
10. Tester les autorisations
Un test qui vérifie qu'un utilisateur sans droit reçoit bien une erreur 403 vaut mieux qu'une longue relecture.
La sécurité n'est pas une fonctionnalité que l'on ajoute à la fin : c'est une habitude que l'on prend à chaque ligne.
Vous voulez un regard extérieur sur votre application ? Je réalise des audits de sécurité Laravel avec un rapport priorisé et des correctifs concrets.
Mahoulolo SEBIO