Rate Limiting begrenzt, wie häufig ein Client, Konto oder Vorgang einen Dienst innerhalb eines Zeitraums nutzen darf. Eine gute Umsetzung zählt nicht nur HTTP-Requests, sondern schützt die jeweils knappe Ressource: Login-Prüfungen, versendete SMS, Passwort-Reset-Mails, Datenbankabfragen, Datei-Exporte oder Kosten eines externen Dienstes.
Wogegen hilft Rate Limiting?
| Anwendungsfall | Ziel der Begrenzung |
|---|---|
| Login | Brute Force und Credential Stuffing verlangsamen. |
| Passwort-Reset und MFA | Code-Raten, Kontobelästigung und Kosten durch SMS oder E-Mail einschränken. |
| API | Faire Nutzung, Tarifgrenzen und Schutz teurer Endpunkte durchsetzen. |
| Suche und Export | Massenscraping, Enumeration und ressourcenintensive Abfragen erschweren. |
| Öffentliche Dienste | Einzelne Quellen daran hindern, die gesamte Kapazität zu belegen. |
Rate Limiting erhöht die Kosten eines Angriffs, verhindert ihn aber nicht zwingend. Ein verteilter oder sehr langsamer Angriff kann unter einfachen Schwellen bleiben. Gegen einen volumetrischen DDoS-Angriff, der bereits die Internetleitung füllt, muss die Filterung außerdem vorgelagert stattfinden.
Nach welchem Merkmal wird begrenzt?
Der Schlüssel muss zum Missbrauchsszenario passen. Ein Limit pro IP-Adresse ist einfach, trifft aber viele legitime Nutzer hinter einem Mobilfunk-Gateway oder Unternehmensproxy und lässt sich durch verteilte Quellen umgehen. Ein Limit nur pro Konto ermöglicht dagegen gezielte Sperrangriffe gegen fremde Konten. Belastbare Systeme kombinieren je nach Vorgang Konto, API-Token, Session, Gerät, Mandant, IP-Präfix und globale Kapazität.
Sensible oder teure Aktionen brauchen eigene Limits. Tausend gecachte Lesezugriffe können harmloser sein als zehn PDF-Exporte. Authentifizierte Premium-Nutzer dürfen gegebenenfalls mehr nutzen, sollten aber ebenfalls keine unbegrenzte Ressource erhalten.
Welche Algorithmen gibt es?
| Verfahren | Eigenschaft |
|---|---|
| Fixed Window | Einfacher Zähler pro festem Zeitfenster; an der Fenstergrenze sind kurze Spitzen möglich. |
| Sliding Window | Betrachtet ein gleitendes Zeitfenster und verteilt die Begrenzung gleichmäßiger. |
| Token Bucket | Token entstehen mit konstanter Rate; ein Vorrat erlaubt kontrollierte Bursts. |
| Leaky Bucket | Verarbeitet Anfragen mit gleichmäßiger Rate und glättet Lastspitzen. |
| Concurrency Limit | Begrenzt gleichzeitig laufende teure Vorgänge statt nur deren Startzahl. |
Welcher Algorithmus geeignet ist, hängt davon ab, ob kurze legitime Bursts erlaubt sein sollen, wie teuer exakte Zählung ist und ob mehrere Server denselben Zustand teilen müssen.
Wie sollte eine Begrenzung reagieren?
HTTP-APIs antworten typischerweise mit Status 429 Too Many Requests. Ein
Retry-After-Wert oder dokumentierte Rate-Limit-Header helfen gutartigen Clients, ihre
Nutzung anzupassen. Je nach Risiko sind Verzögerung, Warteschlange, Challenge, reduzierte Funktion
oder eine temporäre Sperre sinnvoll. Die Reaktion darf nicht verraten, ob ein unbekannter Benutzername
existiert, und sollte keinen einfachen Weg schaffen, fremde Konten dauerhaft zu blockieren.
Wie funktioniert Rate Limiting in verteilten Systemen?
Bei mehreren Anwendungsinstanzen muss die Begrenzung konsistent am API-Gateway, Reverse Proxy oder in
einem gemeinsamen schnellen Datenspeicher erfolgen. Lokale Zähler pro Server vervielfachen sonst das
tatsächliche Limit. Anwendungen dürfen Client-IP-Header nur von bekannten Proxies übernehmen; frei
gesetzte X-Forwarded-For-Werte würden eine Umgehung erlauben. Für Ausfälle des zentralen
Limiters braucht es eine bewusste Entscheidung zwischen Fail-open, Fail-closed und einem sicheren
lokalen Ersatzlimit.
Welche Fehler sind häufig?
- Nur die Webseite ist begrenzt, während mobile oder ältere API-Endpunkte unbegrenzt bleiben.
- Erfolgreiche und fehlgeschlagene Versuche setzen denselben Zähler unbedacht zurück.
- Limits sind hart codiert, und ihre Wirkung auf unterschiedliche Kundengruppen bleibt unsichtbar.
- Fehlerantworten benötigen fast dieselbe teure Verarbeitung wie die eigentliche Anfrage.
- Ein globales Limit schützt die Kapazität, ermöglicht aber einem Angreifer, alle legitimen Nutzer zu verdrängen.
Codebeispiel: Login-Limit in Laravel
RateLimiter::for('login', function (Request $request) {
$email = mb_strtolower((string) $request->input('email'));
return [
Limit::perMinute(60)->by('ip:' . $request->ip()),
Limit::perMinute(5)->by('account:' . hash('sha256', $email)),
];
});
Route::post('/login', LoginController::class)
->middleware('throttle:login');
Die Werte sind nur ein Beispiel und müssen zu Nutzerzahl und Risiko passen. Die Kombination bremst einen einzelnen Absender und schützt gleichzeitig ein gezielt angegriffenes Konto; ein einziges globales Limit würde legitime Nutzer leichter aussperren.
Wie werden Limits sinnvoll getestet?
Tests prüfen Normalnutzung, erlaubte Bursts, exakte Grenzübergänge, parallele Requests und verschiedene Schlüssel. Danach folgen Umgehungsversuche über alternative Endpunkte, Groß-/Kleinschreibung, wechselnde IP-Header, mehrere Knoten und verteilte Konten. Monitoring sollte verworfene und verzögerte Anfragen, betroffene Nutzer, Auslastung und Fehlalarme sichtbar machen. Erst diese Betriebsdaten zeigen, ob ein Limit Missbrauch bremst, ohne legitime Nutzung unangemessen zu stören.
Vielen Dank für dein Feedback! Wir werden es prüfen und unseren Artikel anpassen.