Le mass assignment en Laravel peut exposer votre application à des risques de sécurité si les champs ne sont pas correctement protégés.
Ces risques incluent l’injection de champs non autorisés, compromettant potentiellement l’intégrité de vos données.
L’article explore comment utiliser les propriétés fillable et guarded pour sécuriser vos modèles et prévenir ces vulnérabilités.
Initiez-vous à Laravel et réalisez votre première application en toute confiance.
En Laravel, le concept de mass assignment permet d’attribuer rapidement un ensemble de valeurs aux propriétés d’un modèle lors de la création ou de la mise à jour d’un enregistrement. Cependant, il est crucial de protéger les champs de votre modèle pour éviter les risques de sécurité, tels que l’injection de champs non autorisés. Pour cela, Laravel propose l’utilisation des propriétés fillable et guarded.
Mass Assignment : méthode store Laravel
Le code suivant montre comment nous utilisons le mass assignment dans la méthode store :
public function store(Request $request)
{
// Validation des données postées avec des messages personnalisés
$article = Auth::user()->articles()->create(
request()->validate([
'title' => ['required', 'max:255', 'unique:articles,title'],
'content' => ['required'],
'category' => ['sometimes', 'nullable', 'exists:categories,id'],
])
);
// Assigner la catégorie après la création
$article->category_id = request('category', null);
$article->save();
$success = 'Article ajouté';
return back()->withSuccess($success);
}
- Auth ::user()->articles()->create(): Cette ligne utilise lemass assignmentpour créer un article en associant directement l’utilisateur authentifié.
- request()->validate() :Les données sont validées avant d’être transmises à la méthode create() pour garantir que seules des valeurs sûres sont insérées.
Protection des champs : fillable vs guarded
Dans le modèle Article, nous protégeons les champs pour contrôler ce qui peut être inséré en masse :
//protected $fillable =['title','user_id','slug','content','category_id'];
protected $guarded =['category_id','user_id','slug'];
- $fillable :Liste les attributs qui peuvent être affectés en masse. Si un attribut est spécifié dans$fillable, il peut être utilisé lors de l’appel de la méthode create() ou update().
- $guarded :Liste les attributs quine doivent pasêtre affectés en masse. Tous les champs non spécifiés ici sont automatiquement considérés comme protégés.
Comparatif : fillable et guarded Laravel
Aspect | $fillable | $guarded |
---|---|---|
Fonctionnement | Spécifie explicitement les champs autorisés pour le mass assignment. | Spécifie explicitement les champs protégés contre le mass assignment. |
Usage recommandé | Utilisé lorsque vous souhaitezpréciser uniquementles champs à affecter. | Utilisé lorsque vous voulezprotégerdes champs spécifiques tout en autorisant les autres. |
Sécurité | Risque d’oubli d’ajouter un champ dans la liste si de nouveaux champs sont ajoutés au modèle. | Plus flexible car vous pouvez protéger des champs critiques et laisser les autres accessibles. |
Définition | protected $fillable = [‘title’, ‘content’]; | protected $guarded = [‘user_id’, ‘slug’]; |
Modèle Article : sécurité et mass assignment
L’exemple ci-dessous montre la configuration avec $guarded pour protéger certains champs :
class Article extends Model
{
protected $guarded = ['category_id', 'user_id', 'slug'];
}
protected $guarded : Cette propriété protège les champs category_id, user_id, et slug contre le mass assignment , ce qui signifie que ces champs ne seront pas remplis automatiquement via des requêtes de création ou de mise à jour en masse.
Utiliser $guarded peut être plus pratique lorsque vous avez beaucoup de champs dans votre modèle et que vous souhaitez seulement protéger certains champs critiques.
Résultat affiché après test
Lorsque vous testez l’application et soumettez des données via le formulaire, l’article sera créé avec les champs validés. Si un champ non autorisé est envoyé, Laravel retournera une exception de MassAssignmentException , protégeant ainsi votre application contre les modifications indésirables des champs protégés.
Exemple de résultat en cas de champ non autorisé :
Erreur : MassAssignmentException
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.
FAQ
Qu'est-ce que le mass assignment en Laravel ?
Comment sécuriser le mass assignment en Laravel ?
Quelle est la différence entre fillable et guarded ?
Quand utiliser fillable ou guarded en Laravel ?
Quels sont les risques de ne pas utiliser fillable ou guarded ?
Conclusion
En comprenant et en appliquant correctement les concepts de mass assignment, fillable et guarded, vous pouvez sécuriser efficacement votre application Laravel. Quelle stratégie de sécurité préférez-vous intégrer dans vos projets Laravel pour garantir la protection de vos données ?