Aller au contenu

Le rate-limit d'upload dans Forge

Ce document explique comment forge_mvc_files limite la fréquence des uploads par adresse IP.

Le fichier de code correspondant est forge_mvc_files/rate_limit.py.

1. À quoi sert ce module ?

Sans limite, un client pourrait inonder le serveur d'uploads.
Le rate-limit compte les tentatives d'upload par IP sur une fenêtre glissante et bloque au-delà d'un seuil.

Il fonctionne en mémoire, sur le même modèle que le rate-limit de connexion du cœur ; les compteurs d'upload sont isolés de ceux de la connexion.

2. L'API

Fonction Rôle
is_upload_rate_limited(ip) True si l'IP a atteint la limite sur la fenêtre courante
record_upload_attempt(ip) enregistre une tentative d'upload pour cette IP

3. Usage dans un contrôleur

from forge_mvc_files import is_upload_rate_limited, record_upload_attempt

def upload_avatar(request):
    if is_upload_rate_limited(request.ip):
        return Response.json({"error": "too_many_uploads"}, status=429)
    record_upload_attempt(request.ip)
    saved = save_upload(request.file("avatar"))
    ...

L'ordre est important : on vérifie avant de traiter, puis on enregistre la tentative.

4. Limites connues

Le compteur est en mémoire processus : il est perdu au redémarrage et n'est pas partagé entre plusieurs workers.
C'est cohérent avec le modèle mono-processus de Forge (voir la politique de sécurité) ; un déploiement multi-worker exigerait un backend partagé.

5. Contextes d'utilisation

  • Route d'upload : garde en tête de contrôleur, avant save_upload.
  • Tests : les compteurs sont vidés entre tests par l'infrastructure de test partagée.

6. Voir aussi