1.0 KiB
Exercice 2 — Cloisonner l'accès aux objets / BOLA (API1)
Risque OWASP : API1 Broken Object Level Authorization.
Contexte : tout utilisateur authentifié peut lire/modifier n'importe quel équipement via son ID.
Consignes :
-
Ajoutez au modèle
Equipementun champproprietaire(clé étrangère versUser) ;proprietaire = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="equipements")
migrez.
-
Dans l'
EquipementViewSet, surchargezget_queryset()pour ne renvoyer que les équipements durequest.user. -
Faites en sorte que la création affecte automatiquement le propriétaire (
perform_create). -
Ajoutez une permission au niveau objet (
has_object_permission) qui vérifie l'appartenance. -
Vérifiez : l'utilisateur A ne peut pas accéder (404/403) à l'équipement de l'utilisateur B.
Critères : cloisonnement effectif par propriétaire (queryset + permission objet), démonstration A/B.