Veilig coderen en de OWASP Top 10 voor backends · Les

API-rate limiting en throttling

Leer hoe rate limiting API's beschermt tegen misbruik, brute force en denial-of-service, en hoe u strategieën met token buckets en sliding windows implementeert.

Les 4 van 413 stappen

API-rate limiting en throttling is een gratis Veilig coderen en de OWASP Top 10 voor backends-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Veilig coderen en de OWASP Top 10 voor backends. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Veilig coderen en de OWASP Top 10 voor backends bevat in totaal 4 lessen.

Waarom snelheidsbeperking?

Snelheidsbeperking begrenst hoeveel verzoeken een cliënt binnen een bepaalde periode kan doen. Het beschermt API's tegen aanvallen met uitproberen, scrapen, onbedoelde lussen en denial-of-service.

Het is een belangrijke maatregel in best practices voor API-beveiliging.

Afremmen versus beperken

Snelheidsbeperking weigert verzoeken boven een harde limiet; afremmen vertraagt ze (door ze in een wachtrij te plaatsen of uit te stellen) in plaats van ze direct te weigeren. Beide beheren belasting en misbruik en worden vaak samen gebruikt.

Waarop je beperkt

Kies een sleutel waartegen je verzoeken telt:

  • API-sleutel of gebruikers-ID voor geverifieerd verkeer
  • IP-adres voor anoniem verkeer
  • Gevoeligheid van het eindpunt (strengere limieten bij inloggen)

Door sleutels te combineren krijg je fijnmazigere controle en weersta je eenvoudige omzeilingen.

Vast tijdvenster

De eenvoudigste aanpak telt verzoeken in een vast tijdvenster en zet de teller na elke periode terug. Dit is eenvoudig, maar staat pieken aan de randen van vensters toe (twee keer de limiet over een grens heen).

import time

window = {}
LIMIT = 5
PERIOD = 60

def allow(key):
    now = int(time.time() // PERIOD)
    count = window.get((key, now), 0)
    if count >= LIMIT:
        return False
    window[(key, now)] = count + 1
    return True

Tokenbucket

De tokenbucket vult tokens met een constante snelheid aan tot een bepaalde capaciteit. Elk verzoek verbruikt een token; bij een lege bucket wordt het verzoek geweigerd. Zo zijn gecontroleerde pieken mogelijk terwijl een gemiddelde snelheid wordt afgedwongen.

import time

class TokenBucket:
    def __init__(self, rate, capacity):
        self.rate = rate
        self.capacity = capacity
        self.tokens = capacity
        self.last = time.time()
    def allow(self):
        now = time.time()
        self.tokens = min(self.capacity, self.tokens + (now - self.last) * self.rate)
        self.last = now
        if self.tokens >= 1:
            self.tokens -= 1
            return True
        return False

Schuivend tijdvenster

Het schuifvenster houdt tijdstempels van recente verzoeken bij en telt alleen de verzoeken binnen de afgelopen N seconden. Het voorkomt het piekprobleem van vaste vensters, maar vereist meer administratie.

Gedistribueerde snelheidsbeperking

Met meerdere servers moeten tellers worden gedeeld. Een centrale opslag zoals Redis bevat de tellers, zodat limieten voor het hele cluster gelden en niet per exemplaar. Gebruik atomaire bewerkingen om racecondities te voorkomen.

Limieten communiceren

Informeer clients met antwoordheaders over hun limieten, zodat clients die zich goed gedragen hun verzoekfrequentie kunnen verlagen.

headers = {
    'X-RateLimit-Limit': '100',
    'X-RateLimit-Remaining': '42',
    'X-RateLimit-Reset': '1717000000',
    'Retry-After': '30',
}
for k, v in headers.items():
    print(k + ': ' + v)

Statuscodes

Retourneer 429 Too Many Requests wanneer een client de limiet overschrijdt, bij voorkeur met een Retry-After-header. Dit is het standaardsignaal dat clients en SDK's verwachten.

Gevoelige eindpunten beschermen

Pas strengere limieten toe op eindpunten met een hoog risico, zoals inloggen, wachtwoord opnieuw instellen en OTP-verificatie. Strakke limieten verminderen brute-forceaanvallen en aanvallen met gestolen inloggegevens rechtstreeks.

  • Inloggen: enkele pogingen per minuut
  • Wachtwoord opnieuw instellen: enkele per uur
  • Algemene leesbewerkingen: ruime limieten

Valkuilen vermijden

Let op omzeilingen: wisselende IP-adressen, ontbrekende limieten op sommige routes en limieten die opnieuw worden ingesteld bij het opnieuw opstarten van de server. Plaats snelheidsbeperking op de gateway- of middlewarelaag, zodat elke route op consistente wijze wordt gedekt.

Korte controle

Test je begrip van snelheidsbeperking.

Samenvatting

Je hebt geleerd waarom API's snelheidsbeperking nodig hebben, hoe je een sleutel voor de beperking kiest en welke afwegingen gelden bij strategieën met een vast venster, een tokenbucket en een schuifvenster. Je hebt ook gedistribueerde snelheidsbeperking met Redis gezien, evenals de 429-reactie en strengere limieten voor gevoelige eindpunten.

Gratis beginnen

Leer Veilig coderen en de OWASP Top 10 voor backends met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
12
Lessen
48

Veelgestelde vragen

Is de les “API-rate limiting en throttling” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Veilig coderen en de OWASP Top 10 voor backends, waaronder “API-rate limiting en throttling”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Veilig coderen en de OWASP Top 10 voor backends bevat in totaal 4 lessen.

Wat leer ik in “API-rate limiting en throttling”?

Leer hoe rate limiting API's beschermt tegen misbruik, brute force en denial-of-service, en hoe u strategieën met token buckets en sliding windows implementeert. Je oefent met Veilig coderen en de OWASP Top 10 voor backends door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Veilig coderen en de OWASP Top 10 voor backends te beginnen?

Ervaring vooraf is niet nodig. Veilig coderen en de OWASP Top 10 voor backends op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “API-rate limiting en throttling”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Veilig coderen en de OWASP Top 10 voor backends?

Ja. Elke les over Veilig coderen en de OWASP Top 10 voor backends bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Veilige RESTful API's ontwerpen
  2. GraphQL API-beveiliging
  3. SSRF-aanvallen voorkomen
  4. API-rate limiting en throttling
← Terug naar Veilig coderen en de OWASP Top 10 voor backends