v1.0 Novembre 2025
6.2.3

Rate Limiting et Throttling

Protection contre les abus et garantie de disponibilité

24 novembre 2025
Version 1.0
Sécurité
1

INTRODUCTION

1.1 Objectif du Document

Ce document décrit la stratégie complète de Rate Limiting et Throttling mise en place pour la plateforme REWAPP. Il détaille les mécanismes de protection contre les abus, les attaques par déni de service et la surcharge des systèmes, tout en garantissant une expérience utilisateur optimale pour les clients légitimes.

1.2 Définitions et Terminologie

Glossaire

Terme Définition
Rate Limiting Limitation du nombre de requêtes autorisées sur une période donnée
Throttling Ralentissement progressif des requêtes en cas de dépassement
Burst Pic de requêtes autorisé temporairement au-delà de la limite normale
Sliding Window Algorithme de fenêtre glissante pour le calcul des limites
Token Bucket Algorithme de jetons pour autoriser les bursts contrôlés
Backoff Délai d'attente exponentiel imposé après un dépassement
DDoS Attaque par déni de service distribué
WAF Web Application Firewall

1.3 Documents de Référence

  • 6.1 Document de Sécurité
  • 6.2 Architecture de Sécurité
  • 6.2.1 Authentification et Autorisation
  • 6.2.2 Protection des Données (CSRF/XSS)
  • 4.3 Architecture Backend API
  • 4.5 Stack Technique Détaillé
2

VUE D'ENSEMBLE DE LA STRATÉGIE

2.1 Objectifs de Sécurité

La stratégie de Rate Limiting de REWAPP vise à :

  • Protéger l'infrastructure contre les attaques DDoS et les abus
  • Garantir une disponibilité de 99.9% du service
  • Assurer une répartition équitable des ressources entre utilisateurs
  • Prévenir les attaques par force brute sur l'authentification
  • Protéger les endpoints sensibles (transactions, QR codes)
  • Maintenir des temps de réponse API < 200ms

2.2 Principes Fondamentaux

Principes de Protection

Principe Description
Defense in Depth Multiple couches de protection (WAF, Kong, Application)
Fail Secure En cas de doute, refuser la requête
Graceful Degradation Dégradation progressive plutôt que coupure brutale
Transparency Headers informatifs pour les développeurs
Proportionality Réponse proportionnelle à la menace détectée

2.3 Architecture Globale

La protection Rate Limiting s'applique à trois niveaux :

1
Niveau 1 - Edge (AWS WAF + Shield)

Protection contre les attaques DDoS volumétriques et les requêtes malveillantes avant même d'atteindre l'infrastructure.

2
Niveau 2 - API Gateway (Kong)

Rate limiting applicatif avec compteurs Redis, gestion fine des quotas par utilisateur, IP et endpoint.

3
Niveau 3 - Application (NestJS)

Protection supplémentaire au niveau applicatif pour les endpoints critiques (authentification, transactions).

3

STRATÉGIES DE RATE LIMITING

3.1 Rate Limiting par Utilisateur

Chaque utilisateur authentifié dispose d'un quota de requêtes basé sur son identifiant unique (user_id extrait du JWT).

Identification de l'utilisateur
  • Extraction du user_id depuis le token JWT validé
  • Stockage du compteur dans Redis avec clé : rate:user:{user_id}
  • TTL automatique aligné sur la fenêtre temporelle

Limites par Type d'Utilisateur

Type Utilisateur Limite Période Burst
Client App Mobile 100 requêtes Par minute +20 (burst 5s)
Partenaire (Dashboard) 200 requêtes Par minute +40 (burst 5s)
Admin 500 requêtes Par minute +100 (burst 5s)
Super Admin 1000 requêtes Par minute +200 (burst 5s)

3.2 Rate Limiting par IP

Pour les requêtes non authentifiées ou en complément du rate limiting utilisateur.

Considérations NAT
  • Détection des adresses IP partagées (entreprises, universités)
  • Combinaison IP + User-Agent pour affiner l'identification
  • Header X-Forwarded-For pour les requêtes via proxy/CDN

Limites par Type d'IP

Type IP Limite Période Burst
IP Standard 1000 requêtes Par minute +100 (burst 10s)
IP Partenaire (Whitelist) 5000 requêtes Par minute +500 (burst 10s)
IP Suspecte (Greylist) 100 requêtes Par minute Aucun
IP Bloquée (Blacklist) 0 requêtes Permanent N/A

3.3 Rate Limiting par Endpoint

Certains endpoints critiques ont des limites spécifiques, plus restrictives que les limites globales.

Limites par Endpoint Critique

Endpoint Limite Période Justification
POST /auth/login 5 req Par minute Protection brute force
POST /auth/register 3 req Par heure (IP) Anti-spam inscription
POST /auth/password/reset 3 req Par heure Protection reset bombing
POST /qr-codes/generate 10 req Par minute QR = ressource coûteuse
POST /qr-codes/scan 30 req Par minute Partenaires scan intensif
GET /transactions 30 req Par minute Requêtes coûteuses BDD
POST /withdrawals 5 req Par jour Opération sensible

3.4 Rate Limiting Global

Protection de l'infrastructure globale contre les pics de charge.

Seuils Globaux

Métrique Seuil Action
Requêtes totales/seconde 10 000 req/s Mode dégradé
Requêtes authentifiées/seconde 5 000 req/s File d'attente
Requêtes API Gateway 15 000 req/s Scaling auto
CPU API Gateway > 80% N/A Throttling global
4

CONFIGURATION ET SEUILS

4.1 Limites par Plateforme

Configuration par Plateforme

Plateforme Utilisateur IP Endpoint Critique
App Mobile iOS/Android 100/min 1000/min Spécifique
Site Vitrine 50/min 500/min Standard
Dashboard Partenaire 200/min 1000/min Scan QR élevé
Dashboard Admin 500/min 2000/min Élevé (bulk ops)
API Webhooks (Entrants) N/A 100/min Validation signature

4.2 Limites par Type d'Endpoint

Configuration par Opération

Type Lecture (GET) Écriture (POST/PUT) Suppression (DELETE)
Authentification 50/min 10/min 5/min
Utilisateurs 100/min 20/min 5/min
Transactions 50/min 10/min N/A
Points 100/min 10/min N/A
QR Codes 20/min 10/min N/A
Partenaires 100/min 20/min 5/min
Campagnes 50/min 10/min 5/min
Statistiques 30/min N/A N/A

4.3 Configuration par Environnement

Paramètres par Environnement

Paramètre Développement Staging Production
Rate Limit Utilisateur Désactivé 500/min 100/min
Rate Limit IP Désactivé 5000/min 1000/min
Rate Limit Endpoint Désactivé x5 prod Standard
Throttling Adaptatif Désactivé Warning Enforce
Pénalités Désactivé Réduites Standard
DDoS Protection Basique Standard Avancé

4.4 Burst Allowance

Le mécanisme de Burst permet des pics temporaires au-delà de la limite normale pour accommoder les comportements légitimes (ouverture d'app, rafraîchissement de page).

Configuration Token Bucket
  • Bucket Size : 120% de la limite par minute
  • Refill Rate : Limite / 60 tokens par seconde
  • Burst Window : 5 secondes maximum
Exemple pour utilisateur standard (100/min)
  • Bucket : 120 tokens maximum
  • Refill : 1.67 tokens/seconde
  • Burst autorisé : 20 requêtes en 5 secondes
5

THROTTLING ADAPTATIF

5.1 Mécanismes de Détection

Le throttling adaptatif analyse le comportement en temps réel pour identifier les patterns anormaux :

Patterns de Détection

Pattern Indicateur Action
Burst répétés > 3 bursts en 5 min Réduction burst 50%
Requêtes échouées > 50% erreurs 4xx Throttle progressif
Vitesse anormale > 10 req/sec soutenu Délai +100ms
Endpoints sensibles Tentatives répétées login Captcha + délai
Pattern DDoS Même payload répété Blocage temporaire

5.2 Niveaux de Réponse

Niveau 0 - Normal

Fonctionnement standard, pas de restriction supplémentaire

1
Niveau 1 - Surveillance (Warning)

Log des comportements suspects • Pas d'impact utilisateur • Alerte équipe monitoring

2
Niveau 2 - Ralentissement (Soft Throttle)

Délai artificiel : 100-500ms par requête • Réduction du burst allowance de 50% • Notification utilisateur possible

Impact modéré
3
Niveau 3 - Limitation (Hard Throttle)

Réduction des quotas de 50% • Délai artificiel : 1-2 secondes • Alerte équipe sécurité

Impact significatif
4
Niveau 4 - Blocage Temporaire

Blocage complet pendant 5-30 minutes • Captcha obligatoire pour débloquer • Investigation automatique

Blocage total

5.3 Algorithmes Utilisés

Sliding Window Log

Utilisé pour les limites précises par utilisateur.

  • Stocke le timestamp de chaque requête
  • Calcul exact du nombre de requêtes dans la fenêtre
  • Consommation mémoire : O(n) où n = nombre de requêtes
Sliding Window Counter

Utilisé pour les limites par IP (compromis précision/performance).

  • Combine compteur courant et précédent avec pondération
  • Estimation : (count_previous × overlap) + count_current
  • Consommation mémoire : O(1)
Token Bucket

Utilisé pour la gestion des bursts.

  • Tokens régénérés à taux constant
  • Autorise des pics si tokens disponibles
  • Implémentation Redis avec MULTI/EXEC
6

IMPLÉMENTATION TECHNIQUE

6.1 Stack Technique

Composants Techniques

Composant Technologie Version Rôle
API Gateway Kong 3.4+ Rate limiting principal
Cache/Compteurs Redis 7+ Stockage compteurs distribués
Application NestJS 10.x Rate limiting secondaire
Edge Protection AWS WAF - Protection DDoS, règles WAF
DDoS Shield AWS Shield Standard Protection volumétrique

6.2 Architecture Kong API Gateway

Configuration Kong Rate Limiting Plugin :

Configuration Kong

Paramètre Valeur Description
policy redis Backend de stockage des compteurs
redis_host elasticache.rewapp.internal Cluster Redis ElastiCache
redis_port 6379 Port standard Redis
redis_password {secret} Via Variables CapRover
redis_database 1 Database dédiée rate limiting
fault_tolerant true Continuer si Redis indisponible
hide_client_headers false Afficher headers X-RateLimit-*
minute 100 Limite par minute (utilisateur)
identifier consumer Identifier par consumer (user)
Fallback sans Redis
  • Bascule vers compteur local en mémoire
  • Limite conservatrice appliquée
  • Alerte OPS immédiate
  • Durée maximale fallback : 5 minutes

6.3 Compteurs Redis

Structure des clés Redis :

Redis Keys
rate:user:{user_id}:minute → Compteur par minute utilisateur
rate:ip:{ip_hash}:minute → Compteur par minute IP
rate:endpoint:{path_hash}:{user_id}:minute → Compteur endpoint spécifique
rate:global:second → Compteur global par seconde
penalty:{user_id}:level → Niveau de pénalité actuel
blacklist:ip:{ip_hash} → IP blacklistée
Configuration Redis
  • Cluster mode avec 3 shards minimum
  • Réplication pour haute disponibilité
  • Eviction policy : volatile-ttl
  • Maxmemory : 512MB dédié rate limiting

Script Lua pour atomicité :

Lua
-- Incrémentation atomique avec TTL
local current = redis.call('INCR', KEYS[1])
if current == 1 then
    redis.call('EXPIRE', KEYS[1], ARGV[1])
end
return current

6.4 Headers HTTP de Réponse

Headers standards retournés sur chaque réponse API :

Headers Rate Limit

Header Description Exemple
X-RateLimit-Limit Limite totale de la fenêtre 100
X-RateLimit-Remaining Requêtes restantes 45
X-RateLimit-Reset Timestamp Unix reset fenêtre 1732800000
Retry-After Secondes avant retry (si 429) 30
X-RateLimit-Policy Politique appliquée user-standard

Exemple de réponse avec headers :

HTTP
HTTP/1.1 200 OK
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1732800060
Content-Type: application/json
7

GESTION DES DÉPASSEMENTS

7.1 Réponses HTTP Standards

Code 429 - Too Many Requests

JSON
{
  "statusCode": 429,
  "error": "Too Many Requests",
  "message": "Vous avez dépassé le nombre de requêtes autorisées. Veuillez réessayer dans 30 secondes.",
  "retryAfter": 30,
  "limit": 100,
  "remaining": 0,
  "resetAt": "2025-11-24T15:00:00Z"
}

Code 503 - Service Unavailable (Surcharge globale)

JSON
{
  "statusCode": 503,
  "error": "Service Temporarily Unavailable",
  "message": "Le service est temporairement surchargé. Veuillez réessayer dans quelques instants.",
  "retryAfter": 60
}

7.2 Système de Pénalités

Les dépassements répétés entraînent des pénalités progressives :

Niveaux de Pénalité

Niveau Déclencheur Pénalité Durée
1 3 dépassements en 1h Limite réduite de 25% 1 heure
2 5 dépassements en 1h Limite réduite de 50% 2 heures
3 10 dépassements en 1h Limite réduite de 75% 6 heures
4 20 dépassements en 24h Blocage temporaire 24 heures
5 Comportement malveillant Blocage permanent Investigation
Réinitialisation des pénalités
  • Décrémentation automatique après période sans incident
  • Reset complet après 7 jours sans dépassement
  • Reset manuel possible par admin (cas support)

7.3 Whitelist et Exceptions

Whitelist IP (Partenaires Premium)
  • Partenaires avec abonnement Premium
  • Limites multipliées par 5
  • Pas de pénalités automatiques
  • Support prioritaire
Whitelist User-Agent (Services internes)
  • Webhooks partenaires bancaires (Budget Insight)
  • Services de monitoring (health checks)
  • Jobs batch nocturnes

Procédure d'ajout whitelist

  1. 1
    Demande via ticket support
  2. 2
    Validation équipe sécurité
  3. 3
    Ajout dans Kong + Redis
  4. 4
    Monitoring renforcé 7 jours
  5. 5
    Validation définitive
8

CAS D'USAGE SPÉCIFIQUES REWAPP

8.1 API d'Authentification

ENDPOINTS CRITIQUES

Protection renforcée contre brute force

Endpoints Authentification

Endpoint Limite Fenêtre Pénalité Échec
POST /auth/login 5 tentatives 1 minute +30s délai par échec
POST /auth/register 3 inscriptions 1 heure (IP) Captcha obligatoire
POST /auth/password/reset 3 demandes 1 heure Notification email
POST /auth/2fa/verify 3 tentatives 5 minutes Blocage 15 min
POST /auth/refresh 20 refresh 1 heure Token révoqué
Protection brute force login
  • Délai exponentiel : 0s, 30s, 60s, 120s, 300s
  • Après 5 échecs : Captcha obligatoire
  • Après 10 échecs : Blocage compte 30 minutes
  • Notification email au propriétaire du compte

8.2 Génération QR Code

QR Code = 60 secondes de validité

Ressource coûteuse nécessitant une protection spécifique

Configuration QR Code

Paramètre Valeur Justification
Limite utilisateur 10/minute QR valide 60s, pas besoin de spam
Limite par jour 100/jour Usage normal : 1-5 QR/jour
Cooldown après génération 5 secondes Évite double-génération accidentelle
QR simultanés actifs 1 maximum Un seul QR valide à la fois
Comportement
  • Génération d'un nouveau QR → Annulation automatique du précédent
  • Rate limit atteint → Message explicatif avec countdown
  • Tentative de génération pendant cooldown → HTTP 429 + Retry-After: 5

8.3 Scan QR Code (Partenaires)

Le Dashboard Partenaire a des besoins spécifiques pour le scan QR en situation de rush.

Configuration Scan Partenaire

Paramètre Valeur Justification
Limite partenaire 60/minute Rush hour restaurant
Limite par device 30/minute Multiple devices possibles
Burst autorisé +20 en 10s Pic momentané accepté
Protection anti-replay
  • Chaque QR code a un ID unique (UUID v4)
  • Stockage Redis des QR scannés (TTL 5 min)
  • Tentative re-scan → HTTP 409 Conflict + message explicite

8.4 Transactions Bancaires

OPÉRATIONS SENSIBLES - Double protection

Les transactions bancaires nécessitent une sécurité renforcée

Endpoints Bancaires

Endpoint Limite Fenêtre Contrôle Supplémentaire
POST /withdrawals 5 demandes 24 heures 2FA obligatoire
GET /transactions/history 30 requêtes 1 minute Cache 30 secondes
POST /bank-accounts/link 3 liaisons 24 heures Vérification identité
Virements bancaires
  • Maximum 5 demandes de virement par jour
  • Montant cumulé maximum : 500€/jour (configurable)
  • 2FA obligatoire pour chaque demande
  • Délai artificiel de 3 secondes (anti-fraud check)
  • Notification email + push systématique
9

MONITORING ET ALERTING

9.1 Métriques Collectées

Métriques Rate Limiting

Métrique Type Agrégation Rétention
rate_limit_requests_total Counter Par endpoint, user, IP 30 jours
rate_limit_exceeded_total Counter Par endpoint, user, IP 90 jours
rate_limit_remaining Gauge Par user 1 jour
throttle_level Gauge Par user, global 7 jours
penalty_applied Counter Par user, niveau 90 jours
blocked_requests Counter Par IP, raison 90 jours

9.2 Dashboards de Supervision

Dashboard Temps Réel (Grafana)
  • Requêtes par seconde globales
  • Taux de 429 (rate limited)
  • Top 10 utilisateurs par volume
  • Top 10 IP par volume
  • Endpoints les plus sollicités
  • Niveau de throttle global
Dashboard Sécurité (Kibana)
  • Tentatives de brute force
  • IP suspectes détectées
  • Patterns d'attaque identifiés
  • Corrélation géographique
Dashboard Business
  • Impact rate limiting sur utilisateurs
  • Corrélation avec plaintes support
  • Évolution des quotas utilisés

9.3 Alertes Automatiques

Configuration Alertes

Alerte Seuil Canal Priorité
Taux 429 > 5% 5% requêtes Slack #ops Warning
Taux 429 > 15% 15% requêtes PagerDuty Critical
Utilisateur bloqué (niveau 4+) Tout blocage Slack #security High
Pattern DDoS détecté Score > 80 PagerDuty + Slack Critical
Redis rate limit indisponible Fallback activé PagerDuty Critical
Top user dépasse 10x limite Volume anormal Slack #security High
10

PROTECTION DDoS

10.1 Couches de Protection

Architecture de Protection DDoS

Couche Technologie Type de Protection
1 - DNS Route 53 Anycast, health checks
2 - Edge CloudFront Cache, filtering
3 - WAF AWS WAF Rules, IP sets, rate-based rules
4 - Shield AWS Shield Standard Volumétrique (Layer 3/4)
5 - API Gateway Kong Applicatif (Layer 7)
6 - Application NestJS Logique métier

10.2 AWS Shield et WAF

AWS Shield Standard (inclus)
  • Protection automatique contre les attaques DDoS Layer 3/4
  • Mitigation en temps réel
  • Pas de coût supplémentaire

AWS WAF Rules

Configuration WAF

Règle Type Action Seuil
AWSManagedRulesCommonRuleSet Managed Block -
AWSManagedRulesKnownBadInputsRuleSet Managed Block -
AWSManagedRulesSQLiRuleSet Managed Block -
RateBased-IP Custom Block 2000 req/5min
GeoBlock-HighRisk Custom Block Liste pays
IPReputationList Custom Block Threat intelligence

10.3 Réponse aux Incidents

Procédure d'escalade DDoS :

1
Niveau 1 - Détection automatique (0-5 min)

WAF rate-based rules activées • Alertes automatiques Slack + PagerDuty • Scaling horizontal déclenché

Automatique
2
Niveau 2 - Intervention équipe (5-15 min)

Analyse du pattern d'attaque • Ajustement rules WAF si nécessaire • Communication équipe produit

SLA: 15 min
3
Niveau 3 - Escalade AWS (15+ min)

Contact AWS Support (Business ou Enterprise) • Activation Shield Advanced si nécessaire • Mitigation avancée

Si nécessaire
Post-incident
  • Analyse forensique complète
  • Mise à jour des règles WAF
  • Documentation et retour d'expérience
11

PROCÉDURES OPÉRATIONNELLES

11.1 Ajustement des Seuils

Les seuils peuvent être ajustés selon les besoins business ou la croissance.

Critères d'ajustement
  • Croissance utilisateurs > 20%/mois → Révision des seuils
  • Taux de 429 > 2% en nominal → Seuils trop bas
  • Incidents de sécurité → Seuils plus restrictifs
  • Événements promotionnels → Seuils temporairement augmentés

Procédure de modification

  1. 1
    Création ticket avec justification
  2. 2
    Analyse impact par équipe tech
  3. 3
    Validation équipe sécurité
  4. 4
    Déploiement staging + tests 24h
  5. 5
    Déploiement production (off-peak)
  6. 6
    Monitoring renforcé 7 jours

11.2 Gestion des Incidents

Incident type : Utilisateur légitime bloqué
  1. Support identifie le cas via ticket
  2. Vérification absence de comportement malveillant
  3. Reset pénalités si légitime
  4. Communication utilisateur
  5. Analyse root cause
  6. Ajustement si pattern récurrent
Incident type : Attaque en cours
  1. Alerte automatique reçue
  2. Identification du vecteur d'attaque
  3. Mise en place contre-mesures
  4. Communication interne (Slack #incident)
  5. Suivi jusqu'à mitigation complète
  6. Post-mortem sous 48h

11.3 Communication Utilisateur

Messages utilisateur en cas de rate limit :

App Mobile

"Vous effectuez trop d'actions. Veuillez patienter quelques secondes."

Dashboard Partenaire

"Limite de requêtes atteinte. Réessayez dans X secondes."

Erreur critique

"Notre service est temporairement surchargé. Nous travaillons à résoudre le problème."

12

CONCLUSION

12.1 Récapitulatif

La stratégie de Rate Limiting et Throttling de REWAPP assure :

  • Protection multicouche : AWS WAF/Shield + Kong + Application
  • Limites adaptées : 100 req/min utilisateur, 1000 req/min IP
  • Flexibilité : Burst allowance, whitelist, configuration par environnement
  • Transparence : Headers HTTP informatifs pour les développeurs
  • Résilience : Fallback en cas de panne Redis
  • Monitoring : Dashboards temps réel et alertes automatiques
  • Conformité : Protection des endpoints sensibles (auth, transactions)

12.2 Points Clés

100 req/min utilisateur
1000 req/min par IP
+20% Burst (5 secondes)
<50ms Réponse 429

12.3 Références

Documents complémentaires :

  • 6.1 Document de Sécurité
  • 6.2 Architecture de Sécurité
  • 4.3 Architecture Backend API
  • 4.5 Stack Technique Détaillé
  • 10.3 Procédures de Monitoring et Alerting