Rate-Limiting

Schutz gegen Denial-of-Service-Angriffe und Ressourcenerschöpfung durch Query-Drosselung.

Konfiguration

# policy.yaml
rate_limits:
  # Globales Standard-Limit
  default:
    queries_per_second: 100
    queries_per_minute: 1000
    burst: 20  # Erlaubt kurze Bursts

  # Benutzer-spezifische Limits
  per_user:
    app_user:
      queries_per_second: 50
      queries_per_minute: 500
    batch_user:
      queries_per_second: 200  # Höher für Batch-Verarbeitung
      queries_per_minute: 5000

  # Abfrage-spezifische Limits
  per_query:
    "expensive_report":
      queries_per_minute: 10  # Teure Abfragen begrenzen
RATE-001PASS

Normale Abfragerate

Innerhalb des Limits (10 Abfragen/Sek.)

for i in {1..10}; do
  psql -c "SELECT * FROM users WHERE id = $i" &
done
# Alle Abfragen werden verarbeitet

Normale Abfrageraten innerhalb der konfigurierten Limits werden ohne Verzögerung verarbeitet.

RATE-002BLOCKED

Rate-Limit überschritten

Erwartete Antwort (nach 50 Abfragen/Sek.)

ERROR: Rate-Limit überschritten
DETAIL: Benutzer 'app_user' hat 50 Abfragen/Sekunde überschritten.
HINT: Warten Sie, bevor Sie weitere Abfragen senden, oder kontaktieren Sie den Administrator.

Header:
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1706965432

Bei Überschreitung des Rate-Limits werden Abfragen temporär blockiert. Die Antwort enthält Header mit Limit-Informationen.

RATE-003PASS

Burst-Handling

Kurze Bursts bis zur konfigurierten Burst-Größe werden toleriert. Das ALG verwendet einen Token-Bucket-Algorithmus, der kurzzeitige Lastspitzen erlaubt, aber anhaltende Überlast verhindert.