Unter „Rate Limiting“, oder auch „Durchsatzbegrenzung“ oder „Ratenbegrenzung“, versteht man eine defensive Strategie zur Streuung des Netzwerkverkehrs. Dabei wird eine Obergrenze festgelegt, wie oft Benutzer oder Anwendungen eine Aktion innerhalb eines definierten Zeitfensters durchführen können.
Rate Limiting begrenzt demnach die Anzahl der Anfragen, die Webserver erreichen. Aus diesem Grund wird die Technik eingesetzt, um Webseiten oder Anwendungen vor unbeabsichtigter oder böswilliger Überlastung, beispielsweise durch Bots, zu schützen.
APIs sind häufige Angriffspunkte, da sie oft öffentlich zugänglich sind und von einer Vielzahl von Clients und Anwendungen genutzt werden. Durch fehlerhafte Implementierungen oder böswillige Angriffe können APIs einer unkontrollierten Anfragelast ausgesetzt sein.
Eine Folge davon kann eine Beeinträchtigung weiter Nutzer sein, da einzelne Clients oder Anwendungen den Dienst monopolisieren. Daher spielt dies bei dem Schutz von APIs eine wichtige Rolle.
Die Funktionsweise von Rate Limiting basiert auf der Verfolgung der Anfragen einer bestimmten Quelle innerhalb eines definierten Zeitraums. Im ersten Schritt wird diese Quelle identifiziert, sei es eine IP-Adresse, eine Benutzer-ID oder ein API-Schlüssel.
Anschließend wird die Anzahl der Anfragen, die von einer Quelle stammen, in dem festgelegten Zeitfenster gezählt. Überschreitet die Anzahl der Anfragen die konfigurierten Begrenzungen, wird eine Aktion ausgeführt, die die Anfrage ablehnt oder verzögert.
Für die Implementierung von Rate Limiting können unterschiedliche Algorithmen genutzt werden. Der Token-Bucket-Algorithmus verwendet einen virtuellen Eimer, der mit einer bestimmten Anzahl von Tokens gefüllt ist. Für jede Anfrage, die eine Quelle an den Zielserver stellt, wird ein Token verbraucht. Der Eimer wird nach einem bestimmten Zeitraum wieder aufgefüllt, ist er aber vor Ablauf der Zeit leer, werden weitere Anfragen gestoppt.
Vergleichbar damit ist der Leaky-Bucket-Algorithmus. Auch hier wird ein virtueller Eimer verwendet, nur dass dieser anstelle von Tokens, Anfragen sammelt. Da der Eimer in regelmäßigen Abständen ausläuft, sollte dieser durch normale Anfragen nicht komplett befüllt werden können. Tritt dieser Fall trotzdem ein, kommen weitere Anfragen nicht mehr durch.
Bei dem Fixed-Window-Counter-Algorithmus werden feste Zeitfenster gesetzt und Zähler erfassen die Anzahl der Anfragen innerhalb dieser. Überschreitet die Anzahl der Anfragen, das definierte Limit, werden weitere Versuche abgelehnt, bis die Zeitfenster rum sind und die Zähler zurückgesetzt wurden.
Bei dem Sliding-Window-Log-Algorithmus werden Anfragen mit einem Zeitstempel protokolliert und innerhalb eines kontinuierlich nach vorne gleitenden Zeitfensters gezählt. Erreicht die Anzahl der Zeitstempel die vordefinierte Anzahl, werden weitere Anfragen gestoppt.
Eine Kombination der Fixed-Window und Sliding-Window-Log-Algorithmen ist der Sliding-Window-Counter-Algorithmus. Hierbei werden die Anfragen in fixen Zeitfenstern und in einem sich nach vorne bewegenden Zeitfenster gezählt.
Auch bei Benutzer-Logins wird Rate Limiting als Sicherheitsmaßnahme eingesetzt. Es dient dabei nicht nur dem Schutz der Infrastruktur, sondern auch dem Schutz der Endnutzer. Insbesondere sollen damit Brute-Force-Attacken entgegengewirkt werden, bei denen Angreifer systematisch unterschiedliche Passwortkombinationen ausprobieren, um sich unbefugten Zugang zu Benutzerkonten zu verschaffen.
Ebenfalls können mit Rate Limiting auch Credential-Stuffing-Angriffe, bei denen Kriminelle Kombinationen aus gestohlenen Nutzernamen und Passwörtern ausprobieren, um Zugang zu Konten zu erhalten. Durch eine Begrenzung der Anzahl der Login-Versuche innerhalb eines definierten Zeitfensters, werden solche Attacken erschwert und zeitgleich Systemressourcen vor Missbrauch geschützt.
Die Begriffe werden gerne synonym verwendet, jedoch funktioniert die Drosselung anders. Bei einer Drosselung werden Anfragen nicht direkt abgelehnt, sondern verzögert, um die Last auf die Server zu reduzieren.
Rate Limiting ist zwar effektiv gegen bestimmte Arten von Angriffen, aber es ist kein Allheilmittel. Es sollte in Kombination mit weiteren Sicherheitsmaßnahmen, wie beispielsweise einer Web Application Firewall (WAF) eingesetzt werden, um einen umfassenden Schutz zu gewährleisten.
Wie ein Türsteher, der den Einlass auf eine bestimmte Anzahl von Personen pro Stunde beschränkt, begrenzt Rate Limiting Anfragen auf eine bestimmte Anzahl pro gesetztem Zeitfenster. Daher ist Rate Limiting ein wichtiges Werkzeug für jeden, der eine Webseite, eine API oder einen anderen Online-Dienst betreibt. Es bietet einen wichtigen Schutz vor Missbrauch und Überlastung, wodurch die Dienste für den Endnutzer verfügbar sind und zuverlässig funktionieren.