Rate Limiting erklärt: Schützen Sie Ihre API, ohne echte Benutzer zu blockieren
Rate Limiting verhindert, dass ein schlechter Schauspieler — oder ein Buggy-Skript — Ihre Website in den Boden hämmert, ohne die Tür auf alle anderen zu knallen.
Rate Limiting Caps, wie viele Anfragen ein Client in einem Zeitfenster machen kann. Es schützt Anmeldeformulare, Suchen und APIs vor Brute Force, Scraping und Runaway-Skripten. Der Mechanismus ist einfach; Auswahlgrenzen, die Angreifer stoppen, ohne echte Menschen zu fangen, ist der Teil, der Gedanken nimmt – vor allem, weil ganze Büros und Mobilfunknetze eine einzige IP-Adresse teilen.
Jede Site hat ein paar Endpunkte, die Ärger anlocken. Das Anmeldeformular, das Passwort zurücksetzen, das Suchfeld, die öffentliche API. Ein Skript, das unbewacht bleibt, kann sie tausendmal in der Sekunde treffen — erraten Sie Passwörter, kratzen Sie den Katalog, oder einfach nur enthusiastisch Fehlfunktion, weil jemand eine Pause Aussage vergessen.
Rate Limiting ist die Kappe, die sagt: "Das ist genug". Die Idee nimmt einen Satz; es richtig zu machen dauert ein wenig mehr.
Die Idee
Erlauben Sie jedem Client eine angemessene Anzahl von Anfragen pro Zeiteinheit und verwerfen oder verlangsamen Sie diejenigen, die sie überschreiten. Eine Person, die um eine Website herum klickt, macht vielleicht zehn Anfragen pro Minute. Ein brutales Skript macht Tausende. Zwischen diesen beiden Zahlen gibt es eine enorme Menge an Raum, was das überhaupt funktioniert.
Welcher Algorithmus und warum er wichtig ist
Es gibt drei gemeinsame Ansätze und der Unterschied zwischen ihnen ist praktischer als es klingt.
Behobenes Fenster
Zählen Sie Anfragen pro Kalenderminute; setzen Sie den Zähler oben in jeder Minute. Einfach, billig, und es hat einen offensichtlichen Fehler: ein Kunde kann seine volle Zulage um 10:00:59 Uhr und seine volle Zulage wieder um 10:01:00 Uhr, liefern doppelt so viel wie vorgesehen in einem Zwei-Sekunden-Burst. Gut für groben Schutz, nicht für alles, was dir wichtig ist.
Schiebefenster
Zählen Sie Anfragen in den folgenden sechzig Sekunden statt der aktuellen Kalenderminute. Dies schließt das Grenzloch und ist, was die meisten Menschen tatsächlich wollen, wenn sie sagen, "100 Anfragen pro Minute".
Token-Eimer
Stellen Sie sich einen Eimer mit 60 Token vor, der pro Sekunde wieder aufgefüllt wird. Jede Anfrage verbringt ein Token. Die Anfragen in einem vernünftigen Tempo entleeren sie nie; ein Burst kann mehrere auf einmal ausgeben, und anhaltende Überschwemmungen entleeren sie und werden abgelehnt, bis sie wieder auffüllen.
Token Bucket ist in der Regel die richtige Standardeinstellung, weil es passt, wie echte Nutzung tatsächlich aussieht. Eine Person, die eine Seite lädt, feuert ein Dutzend Anfragen auf einmal und dann tut nichts für dreißig Sekunden. Eine strenge pro Sekunde Grenze bestraft dieses ganz normale Verhalten; ein Eimer absorbiert es.
Auswahl der Grenzen
Der Fehler ist ein globales Limit, das überall angewendet wird. Ihre Endpunkte haben wild unterschiedliche Risikoprofile und wild unterschiedliche legitime Nutzungsmuster, so dass sie wild unterschiedliche Zahlen wollen.
| Endpunkt | Ausgangspunkt | Überschreiten |
|---|---|---|
| Login, Passwort zurücksetzen | 5–10 pro Minute pro IP | Herausforderung, dann blockieren |
| Anmeldung, Kontaktformular | 3–5 pro Minute pro IP | Herausforderung |
| Suchen | 20–30 pro Minute pro IP | Drosselklappen |
| Öffentliche API, nicht authentifiziert | 60 pro Minute pro IP | 429 mit Wiederholung-Nach |
| Öffentliche API, pro API-Schlüssel | Je nach Planstufen | 429 mit Wiederholung-Nach |
| Allgemeines Browsing | 300+ pro Minute pro IP | Drosselklappen |
Das sind Ausgangspunkte, keine Empfehlungen für Ihre Website — die richtigen Zahlen kommen von Ihrem eigenen Verkehr. Nehmen Sie eine Woche Logs, finden Sie die 99. Perzentil-Request-Rate für reale Sitzungen auf jedem Endpunkt, und setzen Sie die Grenze sinnvoll darüber. Wenn Ihr geschäftigster echter Benutzer 40 sucht pro Minute, ein Limit von 30 wird wütende E-Mails zu generieren.
Die Shared-IP-Falle
Das ist es, das Menschen fängt, und es fängt sie auf eine Weise, die von deiner Seite aus unsichtbar ist.
Eine einzige IP-Adresse ist sehr oft keine einzige Person. Ein Büro mit 200 Personen hinter einem NAT-Gateway ist eine IP. Ein Universitätscampus ist eine IP. Mobile Carrier stellen regelmäßig Tausende von Abonnenten hinter Carrier-Klasse NAT und teilen eine Handvoll Adressen. Corporate VPNs konzentrieren ein ganzes Unternehmen auf einen Exit-Knoten.
Setzen Sie eine aggressive pro-IP-Grenze und Sie blockieren nicht einen missbräuchlichen Benutzer, Sie blockieren alle in diesem Unternehmen, und sie erleben es als "Ihre Website ist gebrochen" anstatt "wir haben die Rate begrenzt". Sie werden Ihnen keine E-Mail schicken. Sie werden einfach gehen.
Wo immer Sie können, können Sie auf etwas spezifischeres als eine IP – einen API-Schlüssel, eine Sitzung, ein Benutzerkonto – begrenzen. Für nicht authentifizierten Verkehr, wo die IP ist alles, was Sie haben, bevorzugen eine Herausforderung gegenüber einem harten Block, wenn die Grenze Reisen. Ein gemeinsames Amt geht an die Herausforderung und geht weiter; ein Skript nicht.
Höflich fehlschlagen
Wenn Sie eine Anfrage ablehnen, tun Sie es in der Weise, wie die Standards erwarten, denn der Kunde am anderen Ende kann durchaus eine legitime Integration sein, die sich korrekt verhält, wenn Sie ihm sagen, wie.
Rückgabe 429 Zu viele Anfragen — nicht 403, was bedeutet, daß man nicht erlaubt ist, eine andere und unwiederholbare Botschaft. Retry-After header sagt, wie lange zu warten. Wenn Sie eine öffentliche API ausführen, senden Sie den aktuellen Grenzzustand auf jeder Antwort, nicht nur die Ablehnungen, so dass ein gut geschriebener Client langsamer werden kann, bevor er die Wand trifft, anstatt danach.
Und halten Sie Ihre Rate Limit Responses billig. Wenn die Ablehnung einer Anfrage Sie eine Datenbankanfrage kostet, kann ein ermittelter Angreifer Sie immer noch mit nichts als Ablehnungen erschöpfen. Dies ist ein weiteres Argument für die Begrenzung am Rand, wo die Ablehnung geschieht, bevor Ihre Anwendung überhaupt beteiligt ist.
Was es wert ist, von der Steuer befreit zu werden
- Verifizierte Such-Crawler. Googlebot krabbelt in Bursts, und Rate begrenzen kann es leise Schäden an Ihrer Indexierung. Überprüfen und befreit.
- Ihre eigene Überwachung. Uptime-Checks von einer festen Adresse sollten nicht mit Ihren Grenzen konkurrieren.
- Webhook-Sender. Zahlungsanbieter versuchen aggressiv durch Design; ein Limit, das sie blockiert können Sie Aufträge verlieren.
- Statische Vermögenswerte. Eine Seitenansicht ist Dutzende von Asset-Anfragen. Begrenzen sie pro IP fängt normales Surfen sofort.
Häufig gestellte Fragen
Was ist eine Zinsbegrenzung?
Rate Limiting Caps, wie viele Anfragen ein einzelner Client innerhalb einer Zeitspanne machen kann, Ablehnung oder Verlangsamung etwas darüber hinaus. Es schützt Anmeldeformulare, Suchendpunkte und APIs vor Brute-Force-Versuche, Abwracken und Fehlverhalten von Skripten, während die normale Nutzung unberührt bleibt, weil legitimer Traffic weit unter der Schwelle eines Angreifers sitzt n.
Was ist ein gutes Zinslimit für eine API?
Es hängt vom Endpunkt ab und nicht vom Standort. Login- und Passwort-Reset-Endpunkte rechtfertigen 5 bis 10 Anfragen pro Minute pro IP, Anmeldeformulare 3 bis 5, Suche 20 bis 30 und eine nicht authentifizierte öffentliche API um 60. Vermeiden Sie Ihre tatsächlichen Zahlen aus Ihren eigenen Logs, indem Sie die 99. Perzentile Request Rate von echten Sitzungen finden und das Limit bequem darüber setzen.
Welchen HTTP-Statuscode sollte eine Rate Limit Return?
429 Zu viele Anfragen, begleitet von einem Retry-After Header, der anzeigt, wie lange der Client warten sollte. Verwenden Sie nicht 403 Verboten, was signalisiert, dass der Client überhaupt nicht erlaubt ist, anstatt dass er langsamer werden und erneut versuchen sollte. Öffentliche APIs sollten auch den aktuellen Grenzzustand bei erfolgreichen Antworten zurückgeben, damit Clients drosseln können, bevor sie abgelehnt werden.
Warum blockiert rate limiting reale Benutzer?
Fast immer, weil viele Menschen eine IP-Adresse teilen. Büros hinter einem NAT-Gateway, Universitätscampus, Unternehmens-VPNs und Mobilfunkanbietern mit Carrier-Grade NAT können hunderte oder tausende echte Nutzer hinter eine einzige Adresse stellen. Ein für eine Person abgestimmtes Pro-IP Limit blockiert daher alle. Beschränken Sie einen API-Schlüssel, eine Sitzung oder ein Konto, wenn möglich, und bevorzugen Sie eine Herausforderung gegenüber einem harten Block ansonsten.
Was ist der Token Bucket Algorithmus?
Token Bucket Modelle ein Eimer mit einer festen Anzahl von Token, die mit einer konstanten Geschwindigkeit wieder aufgefüllt. Jede Anfrage verbraucht ein Token, und Anfragen werden abgelehnt, wenn der Eimer leer ist. Dies toleriert kurze Bursts, das ist, wie reale Browsing verhält, während immer noch Capping anhaltende Anfrageraten - so dass es eine bessere Passform für Web-Verkehr als eine strenge Fix-Fenster-Zähler.
Rate Limiting ist eine jener Kontrollen, bei denen die Standardkonfiguration selten richtig ist und die richtige Konfiguration in Ihren Zugriffsprotokollen sitzt. Verbringen Sie eine Stunde mit einer Woche Verkehr, bevor Sie Ihre Zahlen auswählen, und Sie werden den viel längeren Nachmittag der Arbeit vermeiden, warum ein Kunde das gesamte Büro nicht anmelden kann.
Sehen Sie, wie NordicCDN dies für Ihre Website tut:
Mads hat seit seinem 16. Lebensjahr in der IT gearbeitet — hauptsächlich als Hosting. Er beteiligte sich früh an einer SaaS-Firma und half, sie bis zur Übernahme durch Visma weiterzuentwickeln, hat Data-Center-Netzwerke aufgebaut und betrieben und diente als CTO eines dänischen Rechenzentrums. Er hat NordicCDN gestartet, um eine schnelle, sichere Infrastruktur einfach zu bedienen.