← HTTP — sécurité avancée, 40 leçons de cours

Module 36 / 40 · 90 min

36. Limitation de débit et budgets d’abus

Choisir l’unité protégée plutôt qu’un compteur arbitraire.

Votre progression apparaîtra ici lorsque JavaScript est actif.

La progression et le meilleur score sont enregistrés uniquement dans ce navigateur. Aucun compte n’est nécessaire ; effacer les données du navigateur les supprime. Les durées de modules sont indicatives et incluent les exercices.

Comprendre le mécanisme

429 indique une limitation de demandes selon une politique serveur. Une politique utile précise la ressource protégée, les dimensions de comptage, la fenêtre et le comportement de reprise. Une adresse réseau partagée peut représenter plusieurs utilisateurs ; une adresse annoncée dans un champ non fiable peut être falsifiée. Selon le risque, acteur, opération, coût et ressource métier peuvent être des dimensions plus pertinentes qu’un seul nombre de connexions.

Raisonner et vérifier

Un limiteur ne remplace pas l’autorisation et doit rester cohérent entre instances si son contrat est global. Le client peut recevoir une indication Retry-After, sans obtenir un droit illimité de réessayer. Testez les bordures de fenêtre, les actions coûteuses et la récupération après expiration. Une tentative refusée ne doit pas avoir déjà produit l’effet métier qu’on voulait borner.

Signal 429

429 indique une limitation selon une politique. La cause protocolaire n’est pas cette preuve d’identité. Le statut annonce une limitation selon la politique du service. Le client doit pouvoir distinguer ce refus d’une panne interne et connaître les conditions de reprise lorsque le contrat les fournit.

Erreur fréquente à comprendre

429 prouve une erreur de mot de passe.

La cause protocolaire n’est pas cette preuve d’identité.

Dimensions

Le quota doit préciser ressource et fenêtre. L’interprétation demande dimensions et durée. Précisez ressource, acteur, tenant, fenêtre et coût compté. Un nombre sans unité ni portée ne décrit pas une règle testable ; dix demandes par seconde diffèrent de dix exports simultanés.

Erreur fréquente à comprendre

Un nombre sans unité suffit à définir la politique.

L’interprétation demande dimensions et durée.

IP partagée

Une IP partagée peut représenter plusieurs acteurs. NAT et réseaux partagés compliquent cette équivalence. Un NAT peut regrouper plusieurs personnes derrière une adresse. Une limite par IP seule peut pénaliser des utilisateurs légitimes ; combinez les dimensions adaptées sans faire confiance à une identité réseau fournie librement.

Erreur fréquente à comprendre

Une IP correspond toujours à un utilisateur unique.

NAT et réseaux partagés compliquent cette équivalence.

Proxies

Une adresse annoncée doit suivre la confiance proxy. Le champ reçu peut être contrôlé par un client. L’adresse cliente doit venir de la chaîne de confiance configurée. Si le client peut choisir X-Forwarded-For utilisé par le quota, il peut changer de compteur sans changer d’acteur réel.

Erreur fréquente à comprendre

Tout X-Forwarded-For donne une identité fiable au limiteur.

Le champ reçu peut être contrôlé par un client.

Plusieurs instances

Un quota global demande une coordination adaptée. Les états locaux peuvent être indépendants. Des compteurs locaux indépendants multiplient la capacité globale apparente. Utilisez une coordination adaptée au contrat et testez deux instances lorsque vous annoncez un plafond partagé par tout le service.

Erreur fréquente à comprendre

Un compteur local est toujours global sur dix instances.

Les états locaux peuvent être indépendants.

Retry-After

Retry-After peut guider la reprise. Une indication de délai n’est pas une autorisation illimitée. Une valeur de 30 dans la forme numérique indique ici des secondes. Le client doit respecter le contrat et ajouter une stratégie de reprise bornée, sans relancer immédiatement une rafale identique.

Erreur fréquente à comprendre

Retry-After accorde un nombre illimité de retries.

Une indication de délai n’est pas une autorisation illimitée.

Coût variable

Le coût métier peut être une dimension utile. Les opérations consomment des ressources différentes. Un export lourd peut coûter davantage qu’une lecture simple. Une politique pondérée ou une limite d’opérations actives peut mieux protéger la capacité qu’un simple compteur uniforme de requêtes.

Erreur fréquente à comprendre

Toute requête a nécessairement le même coût.

Les opérations consomment des ressources différentes.

Refus précoce

Un refus pertinent doit précéder l’effet coûteux. Le travail a déjà été effectué si le contrôle arrive après. Décidez avant l’effet coûteux lorsque la règle l’exige. Retourner 429 après avoir appelé le prestataire ou généré un gros fichier ne protège pas la ressource que le quota devait borner.

Erreur fréquente à comprendre

Envoyer l’email puis limiter protège cet envoi.

Le travail a déjà été effectué si le contrôle arrive après.

Bornes de fenêtre

Les bordures de fenêtre doivent être testées. Le comportement aux seuils demande des essais spécifiques. Testez début et fin de fenêtre et concurrence proche du plafond. Les algorithmes de fenêtre peuvent autoriser des rafales différentes ; décrivez le comportement mesuré au lieu de promettre une fluidité absolue.

Erreur fréquente à comprendre

Un seul appel nominal prouve le traitement des bursts.

Le comportement aux seuils demande des essais spécifiques.

Autorisation conservée

La limitation complète l’autorisation. Le budget n’accorde pas de permission métier. Un acteur sous son quota ne gagne aucun droit sur les données d’un tiers. Limitation et contrôle d’accès doivent rester deux décisions explicites, avec leurs propres cas de refus.

Erreur fréquente à comprendre

Un quota disponible donne accès à tout objet.

Le budget n’accorde pas de permission métier.

Atelier guidé : lire, expliquer et vérifier le code

HTTP/1.1 429 Too Many Requests
Retry-After: 30
Cache-Control: no-store

La réponse demande une attente de trente secondes dans cette forme de Retry-After. Définissez aussi le nombre maximal de nouvelles tentatives et le budget global. Côté serveur, vérifiez que le refus intervient avant le travail coûteux et que les compteurs correspondent au périmètre annoncé.

L’annonce ne supprime pas le quota. Cette forme de Retry-After exprime ici des secondes. Ce champ ne décrit pas ce cycle de compte. La reprise peut encore être refusée selon le contrat.

Travail pratique : Définissez une politique de laboratoire pour lecture de catalogue et envoi d’un email coûteux. Testez deux utilisateurs derrière une même adresse.

Critères de correction : Vérifiez que les dimensions choisies évitent de mélanger aveuglément tous les acteurs et bornent réellement le travail coûteux. Testez plusieurs instances, concurrence et reprise, puis documentez les faux refus attendus.

Exemple commenté

HTTP/1.1 429 Too Many Requests
Retry-After: 30
Cache-Control: no-store

Le délai illustratif est exprimé ici en secondes. La stratégie réelle doit définir quota, coût et traitement des demandes concurrentes.

Exercice de mise en pratique

Définissez une politique de laboratoire pour lecture de catalogue et envoi d’un email coûteux. Testez deux utilisateurs derrière une même adresse.

Voir une proposition de correction

Vérifiez que les dimensions choisies évitent de mélanger aveuglément tous les acteurs et bornent réellement le travail coûteux. Testez plusieurs instances, concurrence et reprise, puis documentez les faux refus attendus.

Points de vérification

  • Compter la bonne ressource.
  • Confiance des adresses explicite.
  • Pas d’effet avant un refus pertinent.

Contrôle de connaissances

Cours associé : 36. Limitation de débit et budgets d’abus ↗
Que doit préciser une politique de limitation utile ?

Documentation de référence ↗

Validation du module

101 questions, objectif pédagogique de 75 %. Durée conseillée de 150 minutes, sans limite imposée. Les questions et les choix sont mélangés ; le corrigé apparaît après validation. Le contrôle rapide de la leçon et l’examen final du cours restent des exercices distincts.

Commencer ou reprendre les 101 questions →