Aller au contenu
ZarexDocs

Limitation de débit

Limitez le nombre de requêtes qu'un même visiteur peut faire sur une période donnée.

La limitation de débit protège vos routes contre les abus : tentatives de connexion répétées, scraping, surcharge d'une API. Au-delà de la limite, la requête est refusée avec une réponse 429 et l'en-tête Retry-After.

Le problème

Sans limite, un même visiteur peut envoyer autant de requêtes qu'il le veut : essayer des milliers de mots de passe sur votre page de connexion, aspirer tout votre catalogue, saturer une API coûteuse, ou déclencher des centaines d'envois de SMS et d'e-mails depuis votre formulaire, que vous payez.

Ce qu'elle arrête

  • les attaques par force brute et le test en masse d'identifiants volés ;
  • le scraping massif de vos pages et de vos prix ;
  • l'abus de formulaires : inscriptions en série, envois répétés de codes par SMS ;
  • un client défaillant qui boucle sur votre API.

Quand l'utiliser

Sur les routes sensibles avec une limite stricte (connexion, inscription, mot de passe oublié, envoi de codes), et sur le reste de l'application avec une limite plus large.

Configuration

import { rateLimit } from "@zarex/express"; // ou le paquet de votre framework

rules: [rateLimit({ max: 100, window: "1m" })],

Ici, chaque visiteur peut faire 100 requêtes par minute.

Options

OptionValeursRôle
maxde 1 à 1 000 000Obligatoire. Requêtes autorisées par fenêtre.
window"30s", "1m", "1h", "1d"…Obligatoire. Durée de la fenêtre.
algorithm"FIXED_WINDOW" · "SLIDING_WINDOW"Défaut "FIXED_WINDOW". La fenêtre glissante lisse les pics en début de fenêtre.
characteristicsliste de nomsCe qui identifie un visiteur. Défaut : son adresse IP.
mode"LIVE" · "DRY_RUN" · "OFF"Défaut "LIVE".

Limiter par utilisateur

Par défaut, un visiteur est identifié par son adresse IP. Sur les réseaux mobiles, de nombreux utilisateurs partagent souvent la même adresse : sur une route où l'utilisateur est connecté, mieux vaut limiter par compte.

server.ts
app.use(
  zarex({
    key: process.env.ZAREX_KEY!,
    rules: [
      rateLimit({ max: 20, window: "1m", characteristics: ["userId"] }),
    ],
    call: (req) => ({ characteristics: { userId: req.user?.id } }),
  })
);

Les valeurs fournies par call sont hachées (SHA-256) avant d'être envoyées à Zarex.

La bonne adresse IP

Une limite par IP n'a de sens que si Zarex voit la vraie adresse du visiteur. Derrière un proxy, vérifiez votre réglage : voir L'adresse IP du visiteur.

Sur cette page